HDU ACM 4502 吉哥系列故事——临时工计划 ->动态规划

来源:互联网 发布:java编程思想视频全集 编辑:程序博客网 时间:2024/05/16 12:27

分析:dp[i]表示前i天的最大收入。

现排序,然后dp[i]=max(dp[i],dp[a[j].s-1]+a[j].v)(a[j].e<=i)。

#include<iostream>#include<algorithm>using namespace std;#define N 110int dp[N];         //dp[i]表示第i天的最大收入struct Node{int s,e,v;} node[N*10];bool cmp(const Node& a,const Node& b){return a.e<b.e;}int sovle(int n,int m){int i,j;memset(dp,0,sizeof(dp));sort(node,node+n,cmp);for(i=1;i<=m;i++)for(j=0;j<n;j++){if(node[j].e>i)break;if(dp[i]<dp[node[j].s-1]+node[j].v) //从s的前一天开始,因为不能重复dp[i]=dp[node[j].s-1]+node[j].v;}return dp[m];}int main(){int T,i,n,m;scanf("%d",&T);while(T--){scanf("%d%d",&m,&n);for(i=0;i<n;i++)scanf("%d%d%d",&node[i].s,&node[i].e,&node[i].v);printf("%d\n",sovle(n,m));}    return 0;}


0 0
原创粉丝点击