poj 3616 Milking Time dp
题目大意是一个奶牛可以在一些时间区间产奶,每个区间的产奶量已知,每次产完奶都要休息一下,问最大产奶量。
dp方程类似最长上升子序列的n2算法,dp[i]表示以第i个区间结尾最多能产生多少奶。
则dp[i] = max(dp[j] + e[i].z)。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int dp[1010]; struct node { int x,y,z; }e[1010]; bool cmp(node a,node b) { if(a.x==b.x) return a.y<b.y; return a.x<b.x; } int main() { int n,m,r,ans; while(scanf("%d%d%d",&n,&m,&r)!=EOF) { int i,j; for(i=0;i<m;i++) scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].z); sort(e,e+m,cmp); ans=0; for(i=0;i<m;i++) dp[i]=e[i].z; for(i=0;i<m;i++) { for(j=0;j<i;j++) if(e[j].y+r<=e[i].x) dp[i]=max(dp[i],dp[j]+e[i].z); ans=max(ans,dp[i]); } printf("%d\n",ans); } return 0; }