POJ 3616 Milking Time——区间DP
2017-05-20 14:06
253 查看
一共有M个区间,我们可以对这M个区间进行dp,定义dp[i]为遍历前i - 1个区间得到的最大产奶量(要保证【第i个区间的开始时间】小于【从前i-1个区间选出的一个区间的结束时间】),注意要先对区间的时间进行排序,还要注意dp[M]并不一定是结果,因为可能根本达不到dp[M],最后要对所有dp值遍历一便找最大值
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 1000000 + 10; int dp[maxn]; struct Time { int left, right, val; bool operator < (const Time &another) const { if (left != another.left) return left < another.left; else return right < another.right; } }time[maxn]; int main() { int N, M, R; scanf("%d %d %d", &N, &M, &R); for (int i = 1; i <= M; i++) { scanf("%d %d %d", &time[i].left, &time[i].right, &time[i].val); time[i].right += R; } sort(time + 1, time + 1 + M); for (int i = 1; i <= M; i++) { dp[i] = time[i].val; for (int j = 1; j < i; j++) { if (time[j].right <= time[i].left) { dp[i] = max(dp[i], dp[j] + time[i].val); } } } int ans = -1; for (int i = 1; i <= M; i++) ans = max(dp[i], ans); cout << ans << endl; return 0; }
相关文章推荐
- POJ 3616 Milking Time DP
- POJ 3616 B - Milking Time dp(深搜超时)
- 【dp】Milking Time POJ - 3616
- Milking Time POJ - 3616 (简单dp)
- poj 3616 Milking Time DP
- POJ 3616 Milking Time DP
- poj 3616 Milking Time dp
- poj 3616 Milking Time dp
- POJ 3616【数状数组求区间最大值 + 简单DP】
- Milking Time POJ - 3616
- Milking Time POJ - 3616
- Milking Time POJ - 3616
- POJ_3616_Milking_Time_(动态规划)
- POJ 3616 Milking Time 挤奶问题,带权区间DP
- Milking Time POJ - 3616
- Milking Time POJ - 3616
- [dp]poj 3616 Milking Time 带权重的区间dp
- POJ 3616 Milking Time
- poj 3616 区间dp(奶牛产奶)
- hdu 3616 Milking Time dp 离散化