题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1642
解:用f[i]来表示我们第i段时间挤奶的情况下,在此之前(包括自身),最多能产多少奶。
最后找到最大的f[i].
程序:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct ding{ int s,e,p; }q[2000000]; int dp[2000000],n,m,r; bool cmp(const ding&x,const ding&y){return (x.s==y.s?x.e<y.e:x.s<y.s);} int main() { scanf("%d%d%d",&n,&m,&r); for (int i=1;i<=m;i++) scanf("%d%d%d",&q[i].s,&q[i].e,&q[i].p); sort(q+1,q+1+m,cmp); for (int i=1;i<=m;i++) { dp[i]=q[i].p; for (int j=1;j<=i-1;j++) if (q[j].e+r<=q[i].s) dp[i]=max(dp[i],dp[j]+q[i].p); } int ans=0; for (int i=1;i<=m;i++) ans=max(dp[i],ans); printf("%d\n",ans); return 0; }