题目链接:http://poj.org/problem?id=3616
题目分类:动态规划
代码:
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; int n,m,r; int dp[2000]; struct P { int a,b,c; }point[1009]; int cmp(P X,P Y) { if(X.b==Y.b) return X.a>Y.a; return X.b<Y.b; } int main() { scanf("%d %d %d",&n,&m,&r); memset(dp,0,sizeof(dp)); for(int i=1;i<=m;i++) { scanf("%d %d %d",&point[i].a,&point[i].b,&point[i].c); } sort(point+1,point+m+1,cmp); //printf(" "); for(int i=1;i<=m;i++) { dp[i]=point[i].c; //printf("%d %d %d ",point[i].a,point[i].b,point[i].c); } //printf(" "); for(int i=1;i<=m;i++) { if(point[i].a>n||point[i].b>n) continue; for(int j=i-1;j>0;j--) { if(point[i].a-point[j].b>=r) { dp[i]=max(dp[j]+point[i].c,dp[i]); // break; } } } int ans=-100; // for(int i=1;i<=m;i++) ans=max(ans,dp[i]); printf("%d ",ans); //printf("%d ",dp[i]); return 0; } /*for(int i=1;i<=n;i++) { i-1 1 dp[i]= dp[i-1] i-1 0 i-1 0 find ok dp[i]= }*/