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: NM, 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的更多相关文章

随机推荐

  1. 1656:Combination

    一本通1656:Combination 1656:Combination 时间限制: 1000 ms         内存限制: 524288 KB提交数: 89     通过数: 49 [题目描述] ...

  2. Spring Cloud Config(二):基于Git搭建配置中心

    1.简述 本文选用Git作为配置仓库,新建两个环境的配置文件夹,dev 和 test,文件夹中分别存放 Config Client 端的配置文件,目录结构如下: ├ ─ ─ dev └ ─ ─ con ...

  3. IDEA 重复代码快速重构(抽取重复代码快捷键)

    Ctrl+Alt+M 顺带一提,eclipse的快捷键是:Alt+Shift+M;

  4. electron之打包成安装程序

    1.安装electron-winstaller npm install --save-dev electron-winstaller 2.创建一个build.js var electronInstal ...

  5. Linux -bash: redis-cli: command not found(亲测可行)

    Linux 安装完redis单独用命令: ? 1 redis-server 报错: ? 1 -bash: redis-server: command not found 说明redis-server不 ...

  6. Java同步数据结构之ConcurrentLinkedDeque

    前言 由于LinkedBlockingDeque作为双端队列的实现,采用了单锁的保守策略使其不利于多线程并发情况下的使用,故ConcurrentLinkedDeque应运而生,它是一种基于链表的无界的 ...

  7. Python3中_和__的用途和区别

    访问可见性问题 对于上面的代码,有C++.Java.C#等编程经验的程序员可能会问,我们给Student对象绑定的name和age属性到底具有怎样的访问权限(也称为可见性).因为在很多面向对象编程语言 ...

  8. springboot之activemq安装与实践

    环境:腾讯云centos7 注意:activemq安装插件,可能会报错.本人是主机名的问题,所以修改了主机名. vim /etc/hosts vim /etc/hostname 修改这两个文件,并重启 ...

  9. C++ list 查找

    #include <iostream>#include <list>#include <algorithm> using namespace std; int ma ...

  10. anconda + python 3.6安装(以前的anconda,anaconda和python版本对应关系)

    anconda + python 3.6安装 anaconda + python3.6安装安装老版本带python3.6的anaconda安装老版本带python3.6的anacondaanacond ...