NOIP模擬 地球發動機(DP)
阿新 • • 發佈:2018-12-19
傳送門
【題目分析】
哎呀竟然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; }