传送门:

http://poj.org/problem?id=3616

Milking Time
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 13406   Accepted: 5655

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_houriN), an ending hour (starting_houri < ending_houriN), 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 ≤ RN) 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 2
1 2 8
10 12 19
3 6 24
7 10 31

Sample Output

43

Source

 
题目意思:
奶牛为自己规划下面n时间内的产奶,m个时间段,每个段有a,b,c表示从a时到b时共可产奶c。
挤奶工每次挤奶必须挤完完整的时间段,且每次挤完需要休息r时,求最终可获得的牛奶最大值
 
做法:
按结束时间(=结束时间+时间休息)排个序 贪心的思想,为什么是按照结束时间排序,具体请参考贪心经典样例之活动安排问题
为什么:是为了剩余时间最大化
 
    先按照贪心的想法按照结束时间(输入的结束时间+R)升序排序,
    然后用动态规划做。
    dp[i]代表第i个时间区间挤奶可获得的最大产奶量,
    需要遍历前i-1个时间区间中结束时间小于等于第i个时间区间中开始时间,
    求出最大值加上第i个时间区间的产奶量就是dp[i],
    最后去dp数组最大值即可。
 
code:
 
#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
#define max_v 1005
struct node
{
int s,f,v;
}p[max_v];
bool cmp(node a,node b)
{
return a.f<b.f;
}
int dp[max_v];
int main()
{
/*
先按照贪心的想法按照结束时间(输入的结束时间+R)升序排序,
然后用动态规划做。
dp[i]代表第i个时间区间挤奶可获得的最大产奶量,
需要遍历前i-1个时间区间中结束时间小于等于第i个时间区间中开始时间,
求出最大值加上第i个时间区间的产奶量就是dp[i],
最后去dp数组最大值即可。
*/
int n,m,r;
while(cin>>n>>m>>r)
{
for(int i=;i<m;i++)
{
scanf("%d %d %d",&p[i].s,&p[i].f,&p[i].v);
p[i].f+=r;
}
sort(p,p+m,cmp);
for(int i=;i<max_v;i++)
dp[i]=;
dp[]=p[].v;
int ans=dp[];
for(int i=;i<m;i++)
{
int t=;
for(int j=;j<i;j++)
{
if(p[j].f<=p[i].s)
{
t=max(t,dp[j]);
}
}
dp[i]=t+p[i].v;
ans=max(ans,dp[i]);
}
printf("%d\n",ans);
}
return ;
}

最新文章

  1. Vertex and Fragment Shader
  2. 2015年第7本(英文第6本):纳尼亚传奇I–狮子、女巫、魔衣橱
  3. JAVA入门 第五周 1多项式
  4. 2.精通前端系列技术之JS模块化开发-深入学习seaJs(四)
  5. Hadoop学习之--Capaycity Scheduler源码分析
  6. msSQL数据库备份还原小结
  7. Raspberry Pi使用USB摄像头远程监控
  8. oracle几个函数整理 DECODE() NVL NVL2 NULLIF Coalesce(转)
  9. HDU 5054 Alice and Bob
  10. axure母版(模板)区域介绍
  11. Android---&gt;activity高级运用,保存前一个界面为完成的数据savedInstanceState。
  12. web组件开发入门
  13. git添加本地仓库与远程仓库连接
  14. Android视频播放的两种方式介绍
  15. javascript 获取滚动条距离顶部的位置(兼容所有的)。
  16. C语言第八次作业
  17. linux 关于Apache默认编码错误 导致网站乱码的解决方案
  18. Elasticsearch -- 索引管理
  19. Python之路【第四篇】Python基础2
  20. dos2unix 批量转化文件

热门文章

  1. Ubuntu 14.04 下安装搜狗输入法,不要删除ibus
  2. 《HTTP权威指南》之HTTP连接管理及对TCP性能的考虑
  3. elasticSearch2.4与grafana,stagemonitor集成做监控需要执行的mapping
  4. [Matlab] figure
  5. http反向代理之haproxy详解
  6. bootstrap --datetimepicker之时间段选择
  7. Vue2.0以后,有哪些变化
  8. java几种常见的排序算法总结
  9. vba SpecialCells(Type,Value) 参数说明
  10. centos-7.2 node.js免编译安装