Milking Time POJ
来源:互联网 发布:私处美白 知乎 编辑:程序博客网 时间:2024/06/14 10:06
题意:一共有n个任务,然后给你每个任务的开始时间 和结束时间以及这个任务能达到的价值。然后每次做完一个任务后要休息r个时间,问你最大可以得到的价值和
这个比贪心中的节目问题多了一个权值。然后用动态规划,其中的时间要排序,按照开始的时间从小到大排序,那样的话,我们后面就比较好操作了。
dp[i]:表示在做第i个任务得到的最大价值和
然后两重循环
状态转移:dp[i]=max(dp[i],dp[j]+a[i].ef);表示,如果第i个任务被选了的最大价值
然后我们不知道最后第i个任务有没有被选,也就是说dp[i]就是第i个任务一定被选。所以最后还要取dp中的一个最大值,不一定是dp[m]!
//刚开始想的是用dp[i]:第i时间的最大价值,然后超时了。
#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>#include <cmath>using namespace std;const int maxn = 1000005;int dp[1005];struct node{ int bg,ed,ef;};node a[1005];bool cmp(node a1,node a2){ if(a1.bg!=a2.bg) return a1.bg<a2.bg; else return a1.ed<a2.ed;}int main(){ int n,m,r; scanf("%d %d %d",&n,&m,&r); for(int i=1;i<=m;i++){ scanf("%d %d %d",&a[i].bg,&a[i].ed,&a[i].ef); a[i].ed+=r; } sort(a+1,a+m+1,cmp); for(int i=1;i<=m;i++) { dp[i]=a[i].ef; for(int j=i-1;j>=1;j--) { if(a[i].bg>=a[j].ed){ dp[i]=max(dp[i],dp[j]+a[i].ef); } } } int ans=0; for(int i=1;i<=m;i++) ans=max(ans,dp[i]); printf("%d\n",ans); return 0;}
0 0
- poj 3616 Milking Time
- POJ 3616 Milking Time
- POJ-3616-Milking Time
- poj 3616 Milking Time
- POJ 3616 Milking Time
- poj 3616 Milking Time
- Milking Time.(POJ-3616)
- POJ 3616 Milking Time
- POJ 3616 Milking Time
- POJ 3616 Milking Time
- POJ 3616 (milking time)
- POJ 3616 Milking Time
- POJ 3616 Milking Time
- poj 3616 Milking Time
- POJ 3616 Milking Time
- POJ 3616 Milking Time
- poj 3616 Milking Time
- POJ 3616 Milking Time
- POJ 1028 Web Navigation 笔记
- pair的使用
- 希尔排序
- Cos鸣人:我要走自己的Java开发之路
- slf4j-api、slf4j-log4j12以及log4j之间什么关系?
- Milking Time POJ
- 5.0 NuttX File System
- DP练习题
- oracle内存结构+系统全局区+程序全局区(pga)+排序区+大型池+java池
- unity代码修改子物体层级的顺序
- Java虚拟机内存与垃圾回收总结
- cocos2dx 3.4 lua 编译android
- Java复习——final关键字
- Python 3基础教程13-写入文件