搞来搞去又弄混了...果真学习是螺旋进步的过程。
动态规划先搞定两个 最优子结构和无后效性。
这道题 每一行的选取和前两行的选取有关系 所以把这个搞成一个最优态的子结构就可以了
DP[i][z][j] = MAX(DP[i][z][j],DP[i-1][z][j]+x)
定义 Y (i,z,j)=
第I层
在第i-2层状态为z
第i-1层状态为j 的情况下 可得到的最大值
实质上是Y(i-1,z,j)+X1和Y(i-1,z,j)+X2比较 (就是相当于回溯一次再取本次状态值,相信大家都很熟悉了...)
程序中因为需要更新到本层里面,所以Y(i-1,z,j)------>dp[i][z][j];
Y(i-1,z,j)+X2-------->dp[i-1][z][j]+x2
就是接一个更新操作。
之后再传代码吧