题目链接
1 10 5 1 5 100 3 10 10 5 10 100 1 4 2 6 12 266
102
#include<stdio.h> #include<string.h> #include<stdlib.h> int d[2000]; struct Node{ int s,e,c; }num[2000],tmp; int cmp(const void*a,const void *b) { struct Node *x,*y; x=(struct Node*)a; y=(struct Node*)b; if(x->s==y->s) return x->e-y->e; return x->s-y->s; } int main() { int T; int m,n; int i,j; scanf("%d",&T); while(T--) { memset(d,0,sizeof(d)); scanf("%d%d",&m,&n); for(i=1;i<=n;i++) { scanf("%d%d%d",&num[i].s,&num[i].e,&num[i].c); } qsort(num+1,n,sizeof(num[0]),cmp); for(i=1;i<=n;i++) { if(num[i].s>0) for(j=num[i].e;j<=m;j++) d[j]=d[num[i].s-1]+num[i].c>d[j]?d[num[i].s-1]+num[i].c:d[j]; else for(j=num[i].e;j<=m;j++) d[j]=num[i].c>d[j]?num[i].c:d[j]; } printf("%d\n",d[m]); } return 0; }