版权声明:最后一年,加油~ https://blog.csdn.net/zzti_xiaowei/article/details/82152559
思路:
最大递增子序列,一开始还真没想出来,有点尬~
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int Max_n=1e6+10;
const int Max_m=1e3+10;
int n,m,r;
struct edge{
int s,t,e;
bool operator<(const edge&e)const {
return t<e.t;
}
}e[Max_m];
int dp[Max_n];
int main()
{
scanf("%d%d%d",&n,&m,&r);
memset(dp,0,sizeof(dp));
for(int i=0;i<m;i++)
scanf("%d%d%d",&e[i].s,&e[i].t,&e[i].e);
sort(e,e+m);
int ans=0;
for(int i=0;i<m;i++){
dp[i]=e[i].e;
for(int j=0;j<i;j++){
if(e[i].s>=e[j].t+r&&dp[i]<dp[j]+e[i].e)
dp[i]=dp[j]+e[i].e;
}
ans=max(ans,dp[i]);
}
printf("%d\n",ans);
return 0;
}