poj之旅——3616

来源:互联网 发布:淘宝中信v卡有什么好处 编辑:程序博客网 时间:2024/06/10 18:27

题目描述:奶牛Bessie在0~N时间段产奶。农夫约翰有M个时间段可以挤奶,时间段f,t内Bessie能挤到的牛奶量e。奶牛产奶后需要休息R小时才能继续下一次产奶,求Bessie最大的挤奶量

题解:定义dp[i]表示第i个时间段挤奶能够得到的最大值,拆开来说,就是前面 i – 1个时间段任取0到i – 1个时间段挤奶,然后加上这个时间段(i)的产奶量之和


参考程序:

#include<cstdio>#include<algorithm>#define maxn 1024using namespace std;struct Node{       int start,end,eff;}a[maxn];int f[maxn];bool cmp(Node a,Node b){     return a.start<b.start;}     int main(){    int n,m,r;    scanf("%d %d %d",&n,&m,&r);    for (int i=0;i<m;i++){        scanf("%d %d %d",&a[i].start,&a[i].end,&a[i].eff);        a[i].end+=r;    }    sort(a,a+m,cmp);    for (int i=0;i<m;i++){        f[i]=a[i].eff;        for (int j=0;j<i;j++){            if (a[j].end<=a[i].start)               f[i]=max(f[i],f[j]+a[i].eff);        }    }    printf("%d",*max_element(f,f+m));    return 0;}


0 0
原创粉丝点击