1642: [Usaco2007 Nov]Milking Time 挤奶时间(dp)
生活随笔
收集整理的這篇文章主要介紹了
1642: [Usaco2007 Nov]Milking Time 挤奶时间(dp)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1642: [Usaco2007 Nov]Milking Time 擠奶時間
Time Limit:?5 Sec??Memory Limit:?64 MBSubmit:?935??Solved:?551
[Submit][Status][Discuss]
Description
貝茜是一只非常努力工作的奶牛,她總是專注于提高自己的產量。為了產更多的奶,她預計好了接下來的N (1 ≤ N ≤ 1,000,000)個小時,標記為0..N-1。 Farmer John 計劃好了 M (1 ≤ M ≤ 1,000) 個可以擠奶的時間段。每個時間段有一個開始時間(0 ≤ 開始時間 ≤ N), 和一個結束時間 (開始時間 < 結束時間 ≤ N), 和一個產量 (1 ≤ 產量 ≤ 1,000,000) 表示可以從貝茜擠奶的數量。Farmer John 從分別從開始時間擠奶,到結束時間為止。每次擠奶必須使用整個時間段。 但即使是貝茜也有她的產量限制。每次擠奶以后,她必須休息 R (1 ≤ R ≤ N) 個小時才能下次擠奶。給定Farmer John 計劃的時間段,請你算出在 N 個小時內,最大的擠奶的量。
Input
第1行三個整數N,M,R.接下來M行,每行三個整數Si,Ei,Pi.
Output
?最大產奶量.
Sample Input
12 4 21 2 8
10 12 19
3 6 24
7 10 31
Sample Output
43HINT
?
注意:結束時間不擠奶
?
Source
?
/* 水水的dp f[i]表示1~i,i必須選的最大擠奶量。 */ #include<bits/stdc++.h>#define N 4001using namespace std; int n,m,r,ans,cnt; int f[N]; struct node{int st,ed,val,T;bool operator < (const node &a) const{return st<a.st;}}p[N];inline int read() {int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f; }int main() {n=read();m=read();r=read();for(int i=1;i<=m;i++) p[i].st=read(),p[i].ed=read(),p[i].val=read(),p[i].T=p[i].ed-p[i].st+1;sort(p+1,p+m+1);for(int i=1;i<=m;i++) f[i]=p[i].val; for(int i=1;i<=m;i++) for(int j=1;j<i;j++){if(p[j].ed+r<=p[i].st)f[i]=max(f[i],f[j]+p[i].val);}for(int i=1;i<=m;i++) ans=max(ans,f[i]);printf("%d\n",ans);return 0; }?
轉載于:https://www.cnblogs.com/L-Memory/p/9886094.html
總結
以上是生活随笔為你收集整理的1642: [Usaco2007 Nov]Milking Time 挤奶时间(dp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 秀秀的森林(forest)
- 下一篇: linux -- ./configure