1. 程式人生 > >bzoj1642 / P2889 [USACO07NOV]擠奶的時間Milking Time

bzoj1642 / P2889 [USACO07NOV]擠奶的時間Milking Time

cstring 而已 get pro () opened span int for

P2889 [USACO07NOV]擠奶的時間Milking Time

普通的dp

休息時間R其實就是把結束時間後移R個單位而已。但是終點也需要後移R位到n+R

每個時間段按起始時間排序,藍後跑一遍普通的線性dp即可

註意起點是0

(班主任十分顯然地拒絕了我的晚自習機房計劃,畢竟是退役OIer)

技術分享圖片
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 int
max(int &a,int &b){return a>b?a:b;} 7 struct data{ 8 int l,r,val; 9 void Init(){scanf("%d%d%d",&l,&r,&val);} 10 bool operator < (const data &tmp) const{ 11 return l<tmp.l; 12 } 13 }a[1002]; 14 int n,m,R,f[2000005]; 15 int main(){ 16 scanf("
%d%d%d",&n,&m,&R); 17 for(int i=1;i<=m;++i) a[i].Init(); 18 sort(a+1,a+m+1); int k=1; 19 for(int i=0;i<=n+R;++i){ 20 if(i) f[i]=max(f[i],f[i-1]); 21 for(;a[k].l==i&&k<=m;++k) 22 f[a[k].r+R]=max(f[a[k].r+R],f[i]+a[k].val); 23 }printf("
%d",f[n+R]); 24 return 0; 25 }
View Code

bzoj1642 / P2889 [USACO07NOV]擠奶的時間Milking Time