首页 > 代码库 > poj 3616 Milking Time dp

poj 3616 Milking Time dp

题目大意是一个奶牛可以在一些时间区间产奶,每个区间的产奶量已知,每次产完奶都要休息一下,问最大产奶量。

dp方程类似最长上升子序列的n2算法,dp[i]表示以第i个区间结尾最多能产生多少奶。

则dp[i] = max(dp[j] + e[i].z)。

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int dp[1010];struct node{    int x,y,z;}e[1010];bool cmp(node a,node b){    if(a.x==b.x) return a.y<b.y;    return a.x<b.x;}int main(){    int n,m,r,ans;    while(scanf("%d%d%d",&n,&m,&r)!=EOF)    {        int i,j;        for(i=0;i<m;i++)            scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].z);        sort(e,e+m,cmp);        ans=0;        for(i=0;i<m;i++) dp[i]=e[i].z;        for(i=0;i<m;i++)        {            for(j=0;j<i;j++)                if(e[j].y+r<=e[i].x)                    dp[i]=max(dp[i],dp[j]+e[i].z);            ans=max(ans,dp[i]);        }        printf("%d\n",ans);    }    return 0;}
View Code