假设现在有如下的状态转移方程:
dp[i][j]=max(dp[i-1][j+1],dp[i-1][j-1]);
按照转移方程我们可以使用二维数组保存其状态值,如下代码所示:
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
dp[i][j]=max(dp[j-1][j+1],dp[i-1][j-1]);
}
}
int ans=dp[n][m];
考虑到每次状态转移仅与上一行有关,可以将二维变成一维数组保存。如下:
for(int i=1;i<=n;i++){
for(j=1;j<=m;j++){
buf[j]=max(dp[j+1],dp[j-1]);
}
for(j=1;j<=m;j++){
dp[j]=buf[j]
}
}
int ans=dp[m];