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的更多相关文章
随机推荐
- libimobiledevice
#### 安装与卸载 ```bashideviceinstaller -i xxx.ipa # 安装ideviceinstaller -u [bundleID] # 卸载ideviceinstalle ...
- Linux之基础命令
常用命令 查看ip地址的两种方式 ifconfig ip addr show Linux的两种ip地址: 127.0.0.1 本机回环地址 0.0.0.0 全网地址/绑定所有网卡/所有地址 Linux ...
- ubuntu 14.04 安装ntp
安装 sudo apt-get install ntp 修改ntp.conf配置文件 sudo vi /etc/ntp.conf 修改为如下内容 # Enable this if you want s ...
- CF1217C
CF1217C 题意: 给定一个01串,一个good01串的定义是这个01串所代表的二进制数字刚好等于它的长度,允许前导零,问这个01串当中有几个good子串 解法: 枚举每一段连续的 $ 0 $ , ...
- pwn学习日记Day14 《程序员的自我修养》读书笔记
目标文件:计算机科学中存放目标代码的计算机文件,包含着机器代码,代码在运行时使用的数据,调试信息等,是从源代码文件产生程序文件这一过程的中间产物. 目标代码(objectcode)指计算机科学中编译器 ...
- windows 连接 Linux 云服务器
1.在我们购买了 阿里云 或者 腾讯云后,如果选择使用的是 Linux 系统,在 windows 上要远程连接,需要用到的是 putty 这一个软件 putty 官网:https://www.putt ...
- Maven-Profile 环境隔离
作用 快速切换不同的配置环境,比如开发时是连接的本地数据库,发布线上时是另外的数据库,每次编译打包时都要修该配置文件比较麻烦,这时就可以使用环境隔离了. 配置 本地(Local), 开发(Dev), ...
- Flutter移动电商实战 --(36)FlutterToast插件使用
https://github.com/PonnamKarthik/FlutterToast fluttertoast: ^3.0.1 category_page.dart页面添加引用 import ' ...
- 通过generate解析SQL日志生成xml进行SQL回放
查看Oracle redo日志来分析SQL执行记录 1)设置Oracle数据字典导出路径参数(可选) shutdown immediatealter system set UTL_FILE_DIR=' ...
- mac安装mysql数据库及配置环境变量
mac安装mysql数据库及配置环境变量 mac安装mysql数据库及配置环境变量 原文文链接:https://blog.csdn.net/qq_36004521/article/details/80 ...