原题:http://acm.hdu.edu.cn/showproblem.php?pid=4502
#include<stdio.h> #include<string.h> int data[105][105]; // 存储输入的工作数据 int dp[101]; // dp[i]表示从第i天到第m天可获得的最高工资数 int main(void) { int t; int n,m; int i,j; int s,e,c; scanf("%d", &t); while(t--) { scanf("%d%d", &m, &n); memset(data,0,sizeof(data)); memset(dp,0,sizeof(dp)); for(i=0;i<n;i++) { scanf("%d%d%d", &s, &e, &c); if(c>data[s][e]) //果然自己没经验啊,败在此处 data[s][e]=c; } dp[m]=data[m][m]; for(i=m-1;i>=1;i--) { for(j=i;j<=m;j++) { if(data[i][j] != 0) { if(dp[i]<data[i][j]+dp[j+1]) dp[i] = data[i][j]+dp[j+1]; } } if(dp[i]<dp[i+1]) dp[i] = dp[i+1]; } printf("%d\n", dp[1]); } return 0; }