/*
对结束时间从小到大排序后,
dp[i] = max(dp[i-1],dp[x] + val[i]);
x为i可以连接在其后面的最大值。
*/
#include
#include
#include
using namespace std;
const int maxn = 10000 +10;
int dp[maxn] ;
struct node{
int dd, ss,val;
};
node data[maxn];
bool cmp(node a, node b){
if(a.dd != b.dd ) return a.dd < b.dd;
else return a.ss
> 1;
if(data[mid].dd <= x){
ret = mid;
l = mid +1;
}
else r = mid - 1;
}
return ret;
}
int main(){
int n;
while(scanf("%d",&n) != EOF){
for(int i = 1;i <= n; ++ i){
scanf("%d%d%d",&data[i].ss,&data[i].dd,&data[i].val);
}
sort(data + 1, data + n + 1, cmp);
data[0].dd = 0;
for(int i = 1 ; i<= n; ++ i) dp[i] = 0;
for(int i = 1 ; i <= n; ++ i){
int cur = Find(data[i].ss,i-1);
dp[i] = max(dp[i-1],dp[cur] + data[i].val);
}
printf("%d\n",dp[n]);
}
return 0;
}
九度1499
最新推荐文章于 2016-08-15 13:21:51 发布