要用二分搜不然會TLE只有20%(27-36行)
一開始少加37~38行結果只有90%(;´д`)ゞ
#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];
}
#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];
}