Milking Time POJ
来源:互联网 发布:c语言while是什么意思 编辑:程序博客网 时间:2024/06/08 04:04
题意: 总共 N 小时 , M 个产奶时段, 每次产奶后需要休息 R 小时。
给你 M 组数据, 每组数据 包括 :时段的开始时间点, 结束时间点, 时间段产奶量。
思路: 将所有时间段 按 结束时间点 从小到大 排序。
dp[i] 是以 第 i 个时间段结束时的最大产奶量 (排序后),有点像最大序列和,不过需要考虑两个时间的休息时段,即 j 时间段 发生后 i 时间段 能否发生。
for(i=1; i<=m; i++) // 不断 更新 dp[i] 的最优值
{
dp[i] = c[i].v;
for(j=1; j<i; j++) // 和前面的比较(更新后) 更新dp[i]
{
if((c[j].e+r) <= c[i].s) // 如果 j 时间段 发生后 i 时间段 能发生, 则更新 dp[i]
dp[i] = max(dp[i],dp[j]+c[i].v);
}
if(dp[i] > ans)
ans = dp[i]; // 记录最大值结果
}
#include <iostream>#include <cstdio>#include <cstring>using namespace std;typedef struct worktime{int s, e, v;}WT;WT c[2010];int dp[1010];int main(){ int i, j, n, m, r; scanf("%d %d %d",&n,&m,&r); for(i=1;i<=m;i++) { scanf("%d %d %d",&c[i].s,&c[i].e,&c[i].v); } for(i=1; i<m; i++) for(j=i+1; j<=m; j++) { if(c[i].e > c[j].e) { WT temp; temp = c[i];c[i] = c[j]; c[j] = temp;} }memset(dp,0,sizeof(dp)); int ans = -1; for(i=1; i<=m; i++) // 不断 更新 dp[i] 的最优值 {dp[i] = c[i].v; for(j=1; j<i; j++) // 和前面的比较(更新后) 更新dp[i] { if((c[j].e+r) <= c[i].s) dp[i] = max(dp[i],dp[j]+c[i].v); } if(dp[i] > ans) ans = dp[i]; // 记录最大值结果 } printf("%d",ans); return 0; }
阅读全文
0 0
- poj 3616 Milking Time
- POJ 3616 Milking Time
- POJ-3616-Milking Time
- poj 3616 Milking Time
- POJ 3616 Milking Time
- poj 3616 Milking Time
- Milking Time.(POJ-3616)
- POJ 3616 Milking Time
- POJ 3616 Milking Time
- POJ 3616 Milking Time
- POJ 3616 (milking time)
- POJ 3616 Milking Time
- POJ 3616 Milking Time
- poj 3616 Milking Time
- POJ 3616 Milking Time
- POJ 3616 Milking Time
- poj 3616 Milking Time
- POJ 3616 Milking Time
- 三.java多线程之线程调度
- redis数据丢失及解决
- 4.go开源groupcache项目笔记——关于strconv
- RESTful API设计指南
- leetcode Minimum Absolute Difference in BST 二叉搜索树中的最小差
- Milking Time POJ
- 1022. D进制的A+B (20)
- 关于二叉树的结点
- 5.go开源groupcache项目笔记——关于testing
- Github .gitignore详解
- 【数位DP】F(x) HDU
- 使用C语言编写程序,计算N个整数的和(随机输入一个值,例如1到100之间所有整数的和)
- Java JUC之Atomic系列12大类实例讲解和原理分解
- nginx常用命令集合