动态规划,我这里用了最简单的思路,d[i]表示i时间以内最多能挤得奶
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stack>
using namespace std;
const int N=1000000+10;
const int M=1000+10;
int d[N];
int s[M],e[M],v[M];
int n,m,r;
int dp(int u)
{
if(d[u]!=-1)
return d[u];
d[u]=0;
for(int i=0;i<m;i++)
if(e[i]<=u)
{
if(s[i]-r>0)
d[u]=max(d[u],dp(s[i]-r)+v[i]);
else
d[u]=max(d[u],v[i]);
}
return d[u];
}
int main()
{
while(~scanf("%d%d%d",&n,&m,&r))
{
for(int i=0;i<m;i++)
scanf("%d%d%d",&s[i],&e[i],&v[i]);
memset(d,-1,sizeof(d));
printf("%d\n",dp(n));
}
return 0;
}