Try   HackMD

ZeroJudge o257會議室租用 (Meeting Room)

要用二分搜不然會TLE只有20%(27-36行)
一開始少加37~38行結果只有90%(;´д`)ゞ

100%版

#include <bits/stdc++.h> using namespace std; struct Meeting{ int start; int end; int p; }; bool cmp(const Meeting &a, const Meeting &b) { if (a.end == b.end) { return a.p < b.p; } return a.end < b.end; } int main(){ int n; cin>>n; Meeting meeting[n]; for(int i=0;i<n;i++){ cin>>meeting[i].start>>meeting[i].end>>meeting[i].p; } sort(meeting,meeting+n,cmp); int dp[n]; dp[0]=meeting[0].p; for(int i=1;i<n;i++){ int now=meeting[i].p; int left=0,right=i-1; while(left<=right){ int mid=(left+right)/2; if(meeting[mid].end<meeting[i].start){ left=mid+1; } else{ right=mid-1; } } if(right>=0) now+=dp[right]; dp[i]=max(dp[i-1],now); } cout<<dp[n-1]; }

這邊是暴力解版(20%)

#include <bits/stdc++.h> using namespace std; struct Meeting{ int start; int end; int p; }; bool cmp(const Meeting &a, const Meeting &b) { if (a.end == b.end) { return a.p < b.p; } return a.end < b.end; } int main(){ int n; cin>>n; Meeting meeting[n]; for(int i=0;i<n;i++){ cin>>meeting[i].start>>meeting[i].end>>meeting[i].p; } sort(meeting,meeting+n,cmp); int dp[n]; dp[0]=meeting[0].p; for(int i=1;i<n;i++){ int now=meeting[i].p; for(int j=i-1;j>=0;j--){ if(meeting[j].end<meeting[i].start){ now+=dp[j]; break; } } dp[i]=max(dp[i-1],now); } cout<<dp[n-1]; }