首页 > 其他 > 详细

POJ3616 Milking Time 简单DP

时间:2015-12-08 23:43:10      阅读:253      评论:0      收藏:0      [点我收藏+]

注意0,1,.....,N是时间点,i~i+1是时间段

然后就是思路:dp[i]代表到时间点 i 获得的最大价值,

1:dp[i]=max(dp[i],dp[s-r]+e),表示有以s为开头,i为结尾的工作时间,效率是e(保证前面有工作)

2:dp[i]=max(dp[i],e),表示前面没有工作

3:dp[i]=max(dp[i],dp[i-1]),保存到时间点i的最大价值

代码如下

技术分享
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<iostream>
#include<cstdlib>
#include<queue>
#include<map>
#include<set>
using namespace std;
typedef long long LL;
struct asd
{
    int s,e;
};
vector<asd>a[1000001];
int dp[1000001];
int main()
{
    int n,m,r;
    scanf("%d%d%d",&n,&m,&r);
    for(int i=0; i<m; ++i)
    {
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        a[y].push_back((asd)
        {
            x,z
        });
    }
    for(int i=1; i<=n; ++i)
    {
        for(int j=0; j<a[i].size(); ++j)
        {
           int e=a[i][j].e;
           int s=a[i][j].s;
           dp[i]=max(dp[i],e);
           dp[i]=max(dp[i],dp[s-r]+e);
        }
        dp[i]=max(dp[i],dp[i-1]);
    }
    printf("%d\n",dp[n]);
    return 0;
}
View Code

 

POJ3616 Milking Time 简单DP

原文:http://www.cnblogs.com/shuguangzw/p/5031146.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!