题目链接:HDU4502
先排序再DP,f[j]表示第j天结束最多能得到多少的工资。这个有点类似HDU的4512那个,但是这个题目比那个简单。直接上代码吧。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct{
int s, e, v;
}Job;
int cmp(const void *a, const void *b)
{
Job *c, *d;
c = (Job *)a;
d = (Job *)b;
return c -> e - d -> e;
}
int main()
{
int T, m, n;
int f[105];
Job a[1005];
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &m, &n);
memset(f, 0, sizeof(f));
for(int i = 0; i < n; ++i)
scanf("%d%d%d", &a[i].s, &a[i].e, &a[i].v);
qsort(a, n, sizeof(a[0]), cmp);
int ans = 0;
for(int i = 0; i < n; ++i)
{
int max = 0;
if(a[i].e > m)
break;
for(int j = 0; j < a[i].s; ++j)
max = max > f[j] ? max : f[j];
if(max + a[i].v > f[a[i].e])
{
f[a[i].e] = max + a[i].v;
ans = ans > f[a[i].e]? ans : f[a[i].e];
}
}
printf("%d\n", ans);
}
return 0;
}