#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1010;
struct node{
int st,ed;
int val;
}s[N];
int dp[110];
int cmp(node x,node y){
return x.ed<y.ed;
}
int main(){
int t;
int n,m;
scanf("%d",&t);
while(t--){
scanf("%d%d",&m,&n);
for(int i=0;i<n;i++){
scanf("%d%d%d",&s[i].st,&s[i].ed,&s[i].val);
}
sort(s,s+n,cmp);
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++){
for(int j=m;(j>=0)&&(j>=s[i].ed);j--){
dp[j]=max(dp[j],dp[s[i].st-1]+s[i].val);
}
}
printf("%d\n",dp[m]);
}
return 0;
}
简单dp对于第i个如果选则要从加上前面dp[s[i].st-1]部分。为了是先结束的部分已经算出结果,要对s按照ed进行排序。
HDU 4502 吉哥系列故事――临时工计划 dp
最新推荐文章于 2018-10-21 20:20:32 发布