题目大意是一个奶牛可以在一些时间区间产奶,每个区间的产奶量已知,每次产完奶都要休息一下,问最大产奶量。
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; }
本文介绍了一个关于奶牛产奶的问题,并提供了一种基于动态规划的解决方案。该问题要求找出在考虑奶牛休息时间的情况下,可以获得的最大产奶量。通过定义状态转移方程 dp[i]=max(dp[j]+e[i].z),其中 dp[i] 表示以第 i 个时间区间结尾所能获得的最大产奶量。

232

被折叠的 条评论
为什么被折叠?



