POJ 3616 Milking Time

来源:互联网 发布:pc端护眼软件 编辑:程序博客网 时间:2024/04/30 22:15
/*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 0x3f3f3f3fusing 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;}

0 0
原创粉丝点击