刷題——Milking Time POJ - 3616

/*
一個擠奶的問題,擠奶的人有m個工作時間段,每個時間段有一定的產出
一個時間段必須工作完纔可以工作另一個時間段
工作了一個時間段後,必須要休息r時間
所以解決問題時可以先把每個時間段的結尾時間加上r
現在要求在給定的m個時間段裏,所能生產的最大產出


dp[i],表示i時間段產生的最大擠奶量,
那麼dp[j](i>j)dp[i]=max(dp[i],dp[j]+e[i].ef)
*/
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct node{int st,ed,ef;};
node e[1005];
int n,m,r;
int dp[1005];
bool cmp(node a,node b){
    return a.st<b.st||(a.st==b.st&&a.ed<b.ed);
}
int main(){
    while(~scanf("%d %d %d",&n,&m,&r)){
        for(int i=0;i<m;i++){
            scanf("%d %d %d",&e[i].st,&e[i].ed,&e[i].ef);
            e[i].ed+=r;
        }
        sort(e,e+m,cmp);
        for(int i=0;i<m;i++){
            dp[i]=e[i].ef;
            for(int j=0;j<i;j++){
                if(e[j].ed<=e[i].st){
                    dp[i]=max(dp[i],dp[j]+e[i].ef);
                }
            }
        }
        int maxx=0;
        for(int i=0;i<m;i++){
            maxx=max(maxx,dp[i]);
        }
        printf("%d\n",maxx);
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章