原题链接:http://101.200.52.143/problem.php?pid=1408
算法标签:动态规划、排序
代码:
#include<iostream>
#include<algorithm>
using namespace std;
struct Node{
int s1;
int s2;
int sal;
};
int pre[9], dp[9];
bool cmp(Node a, Node b){
if(a.s2 < b.s2){
return true;
}else if(a.s2 == b.s2 && a.s1 < b.s1){
return true;
}else if(a.s2 == b.s2 && a.s1 == b.s1&& a.sal < b.sal){
return true;
}else{
return false;
}
}
int main(){
Node list[9];
for( int i=1; i<=8; i++ ){
cin >> list[i].s1 >> list[i].s2 >> list[i].sal;
}
sort(list+1, list+9, cmp);
for( int i=1; i<=8; i++ ){
for( int j=i-1; 1; j-- ){
if( list[i].s1 >= list[j].s2 || j == 0 ){
pre[i] = j;
break;
}
}
}
list[0].s1 = 0, list[0].s2 = 0, list[0].sal = 0;
for( int i=1; i<=8; i++ ){
dp[i] = max(dp[i-1], dp[pre[i]] + list[i].sal);
}
cout << dp[8];
return 0;
}