/* 2016年8月2日19:37:31
题意:你有一头奶牛,你能够在一定的时间段里挤奶。
而且挤奶量也不同,每次挤奶要休息r时间,问你最大可以挤多少奶。
对时间段按照 开始时间进行排序
dp[i]表示在前 i个时间段挤奶 得到的最多奶
要注意 各个时间段的初始化不是0
而且dp[n]不一定是答案
因为有可能最后几段时间是有重合的 可能 dp[n-1] > dp[n]
*/
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <cmath>
#include <stack>
#include <map>
#include <set>
#define pi acos(-1)
#define LL long long
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = 1e5 + 5;
struct Milk
{
int sta, over, val;
}milk[1005];
int dp[1005];
int cmp(Milk a, Milk b)
{
if (a.sta < b.sta) return 1;
else return 0;
}
int main(void)
{
// freopen("C:\\Users\\wave\\Desktop\\NULL.exe\\NULL\\in.txt","r", stdin);
int n, m, r, ans, i, j;
while(cin >> n >> m >> r)
{
for (i = 1; i <= m; i++)
scanf("%d %d %d", &milk[i].sta, &milk[i].over, &milk[i].val);
sort(milk+1, milk+1+m, cmp);
for (i = 1; i <= m; i++)
dp[i] = milk[i].val;
for (i = 1; i <= m; i++){
for (j = 1; j < i; j++){
if (milk[i].sta >= milk[j].over + r)
dp[i] = max(dp[i], dp[j] + milk[i].val);
}
}
ans = -1;
for (i = 1; i <= m; i++)
ans = max(ans, dp[i]);
cout << ans << endl;
}
return 0;
}
POJ 3616 Milking Time
最新推荐文章于 2018-05-17 12:40:50 发布