bzoj1642 / P2889 [USACO07NOV]擠奶的時間Milking Time
阿新 • • 發佈:2018-11-28
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 intView Codemax(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 }
bzoj1642 / P2889 [USACO07NOV]擠奶的時間Milking Time