DP是什么
就我而言,DP是需要做出最优选择的一种题目,而且是全局最优的选择
DP有个性质,是相关性,就后面做的决策可以在之前做的决策上进行
而且没有后效性
数组的下标代表状态,数组中数的值代表value
贴一个题
D - Snuke Panic (1D) (atcoder.jp)
这个题的状态转移方程是dp[x][t]=max(dp[x-1][t-1],dp[x][t-1],dp[x+1][t-1])+a[x]
key : fup(j,0,min(4ll,i)
这道题一个很关键的地方就是上面的key,如果j>i的话,那就是不可能走到的,由此获得的状态也是不可能的,会干扰后续的计算
const int N=2e5+10;
int n,m,k,x,y,z;
int f[N][10],s[N][10];
void solve(){
//try it again.
cin>>n;
int maxt=0;
up(1,n){
cin>>x>>y>>z;
s[x][y]=z;
maxt=max(maxt,x);
}
f[0][0]=0;
fup(i,1,maxt){
fup(j,0,min(4ll,i)){
if(j){
f[i][j]=max(f[i-1][j],f[i-1][j-1]);
}
f[i][j]=max({f[i-1][j],f[i-1][j-1],f[i-1][j+1]});
f[i][j]+=s[i][j];
}
}
int ans=0;
for(int i=0;i<=4ll;i++)
ans=max(ans,f[maxt][i]);
// debug(ans);
cout<<ans;
}
标签:10,int,max,maxt,DP,dp
From: https://www.cnblogs.com/liangqianxing/p/17048173.html