题目:给奶牛挤奶,共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;
}