Milking Time POJ
阿新 • • 發佈:2018-12-12
題解:定義dp[i]表示第i個時間段擠奶能夠得到的最大值,拆開來說,就是前面 i – 1個時間段任取0到i – 1個時間段擠奶,然後加上這個時間段(i)的產奶量之和。dp[i]滿足如下遞推關係:第i個時間段擠奶的最大值 = 前 i – 1 個時間段擠奶最大值中的最大值 + 第i次產奶量。維護出答案。
附上程式碼:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=1010; struct row{ int st,en,ef; }; row a[maxn]; bool cmp(row a,row b) { return a.st<b.st; } int dp[maxn]; int main() { int n,m,r; while(scanf("%d%d%d",&n,&m,&r)!=EOF){ for(int i=0;i<m;i++){ scanf("%d%d%d",&a[i].st,&a[i].en,&a[i].ef); a[i].en+=r; } sort(a,a+m,cmp); int count; count=dp[0]=a[0].ef; for(int i=1;i<m;i++){ dp[i]=a[i].ef; for(int j=i-1;j>=0;j--){ if(a[i].st>=a[j].en){ dp[i]=max(dp[i],dp[j]+a[i].ef); } } count=max(count,dp[i]); } printf("%d\n",count); } return 0; }