问题描述:
思路1:先讲述一个思路比较简单易懂的,但是复杂度略高的。
定义状态f[i][j][k]表示考虑i个物品,此时放在左边或者放在右边或者不放,此时左边框的高度为j,右边高度为k的状态是否存在。
这样就可以描述一个完整的状态,答案就是f[n][j][j]中为true,且j最大的。
此时进行状态的转移
1不放:f[i][j][k] = f[i - 1][j][k]
2放在左边:f[i][j][k] |= f[i - 1][j - h[i][k]
3放在右边:f[i][j][k] |= f[i - 1][j][k - h[i]
这样就可以计算当前状态ijk是否可以从前面的三个状态转移,因为空间会炸,所以用滚动和数组优化。
代码如下: