码迷,mamicode.com
首页 > 其他好文 > 详细

4月11日

时间:2016-04-11 11:41:19      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

poj3616

题意:奶牛在1到n时间段内产奶,总共有m个产奶区间,买个区间有开始时间和结束时间,还有产奶量,同时每次产完奶需要休息一定的时间,求最大产奶量

分析:比较简单的dp,有点像最长上升子序列的变种,把产奶时间按开始时间排序,对于开始时间大于前面结束时间的点,求其最大的产奶量

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <vector>
 6 #include <algorithm>
 7 #include <set>
 8 #include <map>
 9 #include <bitset>
10 #include <cmath>
11 #include <queue>
12 #include <stack>
13 using namespace std;
14 const int maxn=1500;
15 int dp[maxn];
16 typedef struct p
17 {
18     int start,over,value;
19 }p;
20 int n,m,r;
21 bool cmp(p a,p b)
22 {
23     return a.start<b.start;
24 }
25 int main()
26 {
27     while(cin>>n>>m>>r)
28     {
29         p s[maxn];
30         for(int i=0;i<m;i++)
31         {
32             cin>>s[i].start>>s[i].over>>s[i].value;
33             s[i].over+=r;
34         }
35         sort(s,s+m,cmp);
36         memset(dp,0,sizeof(dp));
37         for(int i=0;i<m;i++)
38         {
39             dp[i]=s[i].value;
40             for(int j=0;j<i;j++){
41                 if(s[i].start>=s[j].over)
42                     dp[i]=max(dp[i],dp[j]+s[i].value);
43             }
44         }
45         int mx=0;
46         for(int i=0;i<m;i++)
47             mx=max(mx,dp[i]);
48         cout<<mx<<endl;
49     }
50     return 0;
51 }
View Code

 

4月11日

标签:

原文地址:http://www.cnblogs.com/wolf940509/p/5377479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!