题解:定义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;
}