题解:
这道题显然可以看出是DP因为不难观察出是要继承对吧,然后呢发现每个去继承前面的复杂度会爆掉,所以就从最后一个开始维护啦
#include<bits/stdc++.h>
using namespace std;
long long f[100005];
int a[100005],p[100005],x[100005];
int read() {
int num=0,f=1;
char ch=getchar();
while(ch>'9'||ch<'0') {
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') {
num=(num<<3)+(num<<1)+ch-'0';
ch=getchar();
}
return num;
}
int main() {
int n,i,pos;
n=read();
for(i=1; i<=n; ++i)
a[i]=read(),p[i]=read(),x[i]=read();
long long Max=0;
for(i=n; i; --i) {
pos=upper_bound(a+1+i,a+n+1,a[i]+x[i])-a;
f[i]=max(f[i+1],f[pos]+p[i]);
Max=max(Max,f[i]);
}
printf("%lld",Max);
return 0;
}