poj3616 递推
来源:互联网 发布:淘宝如何秒杀一元产品 编辑:程序博客网 时间:2024/05/15 03:07
题目链接:点击打开链接
题意:
一只牛要在生产奶,它需要一个计划表;
农夫会有 m 次可能来挤奶;
每一次有起始时间 L,结束时间 R,挤的奶量 E;
而牛产完奶要休息 r 时间;
问如何安排才能得到最多的奶量,求出奶量;
理解:
脑子转不过来;
这儿只有一个像 dp 会使用到的变量 m;
所以要向一维 dp 转换思想;
找出递推式含义:dp[i] 表示以第 i 次为结束能挤到的最大奶量;
即:dp[i] = dp[j] + E[i];
其中满足:j.L + r <= i.R;
初始值为:dp[i] = E[i];
即:第 i 个既是第一个,又是最后一个;
代码如下:
#include <cstdio>#include <cstring>#include <cmath>#include <ctime>#include <iostream>#include <algorithm>#include <vector>#include <string>#include <map>#include <set>#include <queue>#include <stack>using namespace std;typedef long long LL;typedef pair<int, int> PII;const int MIN_INF = 1e-7;const int MAX_INF = (1e9) + 7;#define X first#define Y secondtypedef pair<PII, int> PPI;int dp[1010];bool cmp(PPI p1, PPI p2) { if (p1.X.X == p2.X.X) { return p1.X.Y < p2.X.Y; } return p1.X.X < p2.X.X;}int main() { int n, m, r; cin >> n >> m >> r; vector<PPI> vec(m); for (int i = 0; i < m; ++i) { cin >> vec[i].X.X >> vec[i].X.Y >> vec[i].Y; } sort(vec.begin(), vec.end(), cmp); int ans = -1; for (int i = 0; i < m; ++i) { dp[i] = vec[i].Y; for (int j = 0; j <= i; ++j) { if (vec[i].X.X >= vec[j].X.Y + r) { dp[i] = max(dp[i], dp[j] + vec[i].Y); } ans = max(ans, dp[i]); } } cout << ans << endl; return 0;}
0 0
- poj3616 递推
- POJ3616-递推-Milking Time
- poj3616
- poj3616
- POJ3616
- poj3616
- poj3616
- poj3616
- poj3616 dp
- poj3616 dp
- poj3616(LIS)
- POJ3616 MILKING TIME
- poj3616 Milking Time
- POJ3616 Milking Time 【DP】
- POJ3616 简单DP
- POJ3616---Milking Time
- poj3616 解题报告
- POJ3616:Milking Time
- hdu1166 敌兵布阵 --更新查询
- wpf 完整布局介绍
- 关于LayoutInflater类inflate(intresource, ViewGroup root, boolean attachToRoot)方法三个参数的含义
- "mkimage" command not found - U-Boot images will not be built
- iOS安全系列之一:HTTPS
- poj3616 递推
- 使用git rebase合并多次commit
- HttpURLConnection超时和IO异常处理
- 如何处理OBD数据(数据中存在很多噪声点)的想法和实践!
- UIResponder的响应链方法
- DFS-速算24点
- CSS实现左侧固定宽度右侧自适应的固比布局
- Android中界面实现全屏显示的两种方式
- Swift写- (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options