NOIP模拟 地球发动机(DP)
传送门
【题目分析】
哎呀竟然3min看出来DP转移方程了呢。。。。虽然确实很氵。
因为最后一个不会对后面造成任何影响,所以从后往前推。转移方程:dp[i]=max(dp[i+1],dp[last]+p[i]),last表示第一个不被影响的发动机。
【代码~】
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MAXN=1e5+10;
LL n;
LL a[MAXN],p[MAXN],x[MAXN];
LL dp[MAXN];
LL Read(){
LL i=0,f=1;
char c;
for(c=getchar();(c>'9'||c<'0')&&c!='-';c=getchar());
if(c=='-')
f=-1,c=getchar();
for(;c>='0'&&c<='9';c=getchar())
i=(i<<3)+(i<<1)+c-'0';
return i*f;
}
int main(){
n=Read();
for(LL i=1;i<=n;++i)
a[i]=Read(),p[i]=Read(),x[i]=Read();
dp[n]=p[n];
for(LL i=n-1;i>=1;--i){
LL idx=lower_bound(a+1,a+n+1,a[i]+x[i]+1)-a;
dp[i]=max(dp[i+1],dp[idx]+p[i]);
}
cout<<dp[1];
return 0;
}