POJ 3616 Milking Time(区间dp,简单任务调度问题)
来源:互联网 发布:没银行卡开淘宝店 编辑:程序博客网 时间:2024/05/23 21:58
Time Limit: 1000MS
Memory Limit: 65536K
Total Submissions: 6525
Accepted: 2741
Description
Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that she decides to schedule her next N (1 ≤ N ≤ 1,000,000) hours (conveniently labeled 0..N-1) so that she produces as much milk as possible.
Farmer John has a list of M (1 ≤ M ≤ 1,000) possibly overlapping intervals in which he is available for milking. Each interval i has a starting hour (0 ≤ starting_houri ≤ N), an ending hour (starting_houri <ending_houri ≤ N), and a corresponding efficiency (1 ≤ efficiencyi ≤ 1,000,000) which indicates how many gallons of milk that he can get out of Bessie in that interval. Farmer John starts and stops milking at the beginning of the starting hour and ending hour, respectively. When being milked, Bessie must be milked through an entire interval.
Even Bessie has her limitations, though. After being milked during any interval, she must rest R (1 ≤ R ≤ N) hours before she can start milking again. Given Farmer Johns list of intervals, determine the maximum amount of milk that Bessie can produce in the N hours.
Input
* Line 1: Three space-separated integers: N, M, and R
* Lines 2..M+1: Line i+1 describes FJ's ith milking interval withthree space-separated integers: starting_houri , ending_houri , and efficiencyi
Output
* Line 1: The maximum number of gallons of milk that Bessie can product in the N hours
Sample Input
12 4 21 2 810 12 193 6 247 10 31
Sample Output
43
题意:牛在n时间内产奶,农夫有m段时间可以挤奶,每一段时间有开始点strat,结束点end,和这段时间的挤奶量w。 每一次挤奶后,牛都必须休息r时间。问在最合理的挤奶安排下挤到的最大牛奶量是多少?
题解:先按照结束时间将m个时间段排序,在找到每个时间段之前与其不冲突的时间段,储存在p[]数组中(p[i]表示在i段之前与i不冲突的最大时间段)。那样可以得到递推关系式dp[i]=max(dp[i-1],dp[p[i]]+intre[i].w)
代码如下:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int p[1010],dp[1010];struct node{int start,end,w;}intre[1010];int cmp(node a,node b){return a.end<b.end;}void dix(int m,int r){int i;for(i=m-1;i>0;--i){int k=i-1;while(k>=0&&(intre[k].end+r>intre[i].start))k--;p[i]=k;}}int main(){int n,m,r,i;while(scanf("%d%d%d",&n,&m,&r)!=EOF){for(i=0;i<m;++i)scanf("%d%d%d",&intre[i].start,&intre[i].end,&intre[i].w);sort(intre,intre+m,cmp);dix(m,r);memset(dp,0,sizeof(dp));for(i=0;i<m;++i)dp[i]=max(dp[i-1],dp[p[i]]+intre[i].w);printf("%d\n",dp[m-1]);}return 0;}
- POJ 3616 Milking Time(区间dp,简单任务调度问题)
- POJ 3616 Milking Time(区间DP)
- Milking Time --poj 3616(区间dp)
- poj 3616 Milking Time 【区间DP】
- POJ 3616 Milking Time(简单DP)
- Milking Time (poj 3616 简单DP)
- POJ 3616 Milking Time 简单DP
- [dp]poj 3616 Milking Time 带权重的区间dp
- POJ 3616 Milking Time——区间DP
- POJ 3616 Milking Time(DP,区间和最大)
- poj 3616 Milking Time DP
- POJ 3616 Milking Time DP
- poj-3616 Milking Time 【DP】
- poj 3616 Milking Time DP
- DP-POJ-3616-Milking Time
- poj 3616 Milking Time 【dp】
- [POJ 3616]Milking Time[DP]
- Poj 3616 Milking Time【dp】
- 移动端H5页面的设计稿尺寸大小规范&注意事项
- 每天学点Python之布尔类型
- Android4.0中控制Toast时间
- hadoop2.6及HBase1.1节点日常维护
- 学习总结
- POJ 3616 Milking Time(区间dp,简单任务调度问题)
- sql查询数据库中所有表名
- 如何解决SVN Commit failed (details follow): Access denied
- 一个基本app的搭建
- Eclipse 查看 jar 文件
- Android 基于百度的天气预报
- 得到AppSettings中的配置int信息
- 源码探索系列8---IntentService
- Marshmallow(Android 6.0) 简介