POJ 3616 Milking Time 简单DP

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

详见代码

 

 1 #include <stdio.h>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <cmath>
 6 #include <memory>
 7 #include <iostream>
 8 #define LL long long
 9 using namespace std;
10 struct Node {
11     int s,e,v;
12     friend bool operator < (Node a,Node b) {
13         return a.s<b.s;
14     }
15 };
16 Node node[1010];
17 int main() {
18     int n,m,r;
19     while(~scanf("%d%d%d",&n,&m,&r)) {
20         for(int i=0; i<m; i++) {
21             scanf("%d%d%d",&node[i].s,&node[i].e,&node[i].v);
22             node[i].e+=r;//每次增加休息时间
23         }
24         sort(node,node+m);//时间小的优先级高
25         int dp[1010];//i表示在i时间点前符合题意的最大值
26         memset(dp,0,sizeof(dp));
27         for(int i=0; i<m; i++) {
28             dp[i]=node[i].v;
29             for(int j=0; j<i; j++) {
30                 if(node[j].e<=node[i].s) {//判断条件
31                     dp[i]=max(dp[i],dp[j]+node[i].v);
32                 }
33             }
34         }
35         cout<<*max_element(dp,dp+m)<<endl;
36     }
37     return 0;
38 }
View Code

 

你可能感兴趣的:(POJ 3616 Milking Time 简单DP)