题目:给奶牛挤奶,共m次可以挤,给出每次开始挤奶的时间st,结束挤奶的时间ed,还有挤奶的量ef,每次挤完奶要休息r时间,问最大挤奶量.
分析:最长递增子序列,只是判断条件变了一下。
#include<iostream>
#include<algorithm>
#define maxn 3000010
using namespace std;
typedef long long ll;
struct node{
ll sta,ed,sum;
}A[10050];
bool cmp(node a,node b){
if(a.sta!=b.sta) return a.sta<b.sta;
else if(a.ed!=b.ed) return a.ed<b.ed;
}
ll n,m,r,x,y,z,dp[10050];
int main(){
cin>>n>>m>>r;
for(int i=0;i<m;i++){
cin>>A[i].sta>>A[i].ed>>A[i].sum;
A[i].ed+=r;
}
sort(A,A+m,cmp);
for(int i=0;i<m;i++){
dp[i]=A[i].sum;
for(int j=0;j<i;j++){
if(A[i].sta>=A[j].ed){
// cout<<A[i].sta<<" "<<A[j].ed<<endl;
dp[i]=max(dp[i],dp[j]+A[i].sum);
}
}
}
ll ans=0;
for(int i=0;i<m;i++)
ans=max(ans,dp[i]);
cout<<ans<<endl;
return 0;
}