题目描述
题意:奶牛在s~e的时间区间内产奶,农场主有m个时间段可以挤奶并且给出第i个时间段的挤奶产量,农场主每次挤完奶之后必须休息时间r之后才能工作,问农场主最多可以挤多少奶
按照产奶开始时间排序,然后动态规划来做
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,m,r;
int dp[1005];
struct node
{
int sh,eh,eff,sum;
}milk[1005];
bool cmp(node a,node b)
{
if(a.sh==b.sh)
return a.eh<b.eh;
else
return a.sh<b.sh;
}
int main()
{
while(scanf("%d%d%d",&n,&m,&r)!=EOF)
{
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&milk[i].sh,&milk[i].eh,&milk[i].eff);
}
sort(milk,milk+m,cmp);
memset(dp,0,sizeof(dp));
int temp;
int ans=0;
for(int i=0;i<m;i++){
dp[i]=milk[i].eff;
for(int j=0;j<i;j++){
if(milk[i].sh-milk[j].eh>=r){
dp[i]=max(dp[i],dp[j]+milk[i].eff);
}
}
ans=max(ans,dp[i]);
}
printf("%d\n",ans);
}
}