DP_Milking Time
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 Nhours
Sample Input
12 4 2
1 2 8
10 12 19
3 6 24
7 10 31
Sample Output
43
题意:农夫在M个时间段内可以挤奶(起始时间ST,终止时间ET,该时间段内可以获取的奶量C),奶牛每次产奶后需要休息R小时,求在给定时间,求奶牛在这段时间内的最大产奶量。 思路:每次产奶后需要休息R个小时,即挤奶的时间段可视为ST~ET+R。
1、将区间按时间段的开始时间进行排序。
2、建立数组s[]表示包含本区间并以此区间结尾的区间的最大挤奶量 如 s[3]即为包含有p[3].st~p[3].et区间并以p[3].st~p[3].et结尾的区间的最大挤奶量
3、s[]的递推公式: 若此区间可与前面的区间相接,则保留这个挤奶量,并最终将这些挤奶量的最大值存于数组是s[]
s[]=max{可与当前区间相接的前面区间的s[]+当前区间的挤奶量};
4、遍历数组s[]求数组S中所存的最大值
#include<cstdio>
#include<algorithm>
using namespace std;
int s[];
struct Node{
int st,et,c;
}p[];
bool cmp( Node a, Node b){
if( a.st<b.st )
return true;
return false;
}
void dp( int m){
for( int i=; i<m; i++){
s[i]=p[i].c;
for( int j=; j<i; j++){
if( p[j].et<=p[i].st )
s[i]=max(s[i],s[j]+p[i].c);
}
}
}
int main()
{
int n,m,r;
int max; while(~scanf("%d%d%d",&n,&m,&r)){
max=-;
for( int i=; i<m; i++){
scanf("%d%d%d",&p[i].st,&p[i].et,&p[i].c);
p[i].et+=r;
}
sort(p,p+m,cmp);
dp(m);
for( int i=; i<m; i++)
if( s[i]>max )
max=s[i];
printf("%d\n",max);
} return ;
}
DP_Milking Time的更多相关文章
随机推荐
- ansible的become
# ansible sudo 问题 官方下载centos7.6fcow2镜像不给直接远程ssh了,所以必须sudo,但是有的命令sudo也解决不了的如管道重定向还有多个命令组合. 解决办法: vim ...
- html2canvas原理
html2canvas有2种模式,一种是利用foreignObject,一种是纯canvas绘制 1.foreignObject到canvas 步骤: 1.把要截图的dom克隆一份,过程中把getCo ...
- 软件构造实验二-拷贝一个c文件 将其中的关键字int替换成float
1,新建 Parser Generator 点击project --> new 2,填写工程名字 随意取一个名字 点击OK 3,点击Project选项下的 parserwizard 分析器向导选 ...
- jenkins之docker安装
此方法安装还存在两个问题1.构建node程序:2.时区问题(在docker run 设置环境变量是否能解决没有试过) 不建议用此方法安装,查看我的其他安装方式 搬运官网步骤,稍微改动. 1.安装doc ...
- elasticsearch sql插件配置(5.0及以上版本)
github官方参考地址:https://github.com/NLPchina/elasticsearch-sql/ 采用 git + node 的方式,所以安装前需要先安装好node,node n ...
- Logback 日志策略配置
[参考文章]:官方文档:Logback configuration [参考文章]:logback的使用和logback.xml详解 [参考文章]:Logback源码赏析-日志按时间滚动(切割) 1. ...
- Linux生成key
[root@centos7 ~]# ssh-keygen -b [ -t rsa #这里的-b 2048 是密钥加密的长度,最好设大点 Generating public/private rsa ke ...
- DNS -- 快速清除DNS缓存
MAC: sudo dscacheutil -flushcache Linux: dnsmasq的是一个轻量级的DNS.TFTP和DHCP服务器.它的目的是给局域网提供配对的DNS和DHCP服务. d ...
- 性能分析 | Java服务器内存过高&CPU过高问题排查
一.内存过高 1.内存过高一般有两种情况:内存溢出和内存泄漏 (1)内存溢出:程序分配的内存超出物理机的内存大小,导致无法继续分配内存,出现OOM报错 (2)内存泄漏:不再使用的对象一直占据着内存不释 ...
- route按需加载的3种方式:vue异步组件、es提案的import()、webpack的require.ensure()
1. vue异步组件技术 vue-router配置路由,使用vue的异步组件技术,可以实现按需加载. 但是,这种情况下一个组件生成一个js文件.举例如下: { path: '/promisedemo' ...