贪心算法。
1、先放入价值最大的。这个肯定不行
2、放入平均价值最大的,也不行
二维数组作为记忆化搜索
第一行,只有0这个物品的时候,对应容量的最大值
第二行,考虑0和1两件物品的时候
第三行,0,1,2都考虑
(1,2)这个点
对1考虑放入1,对0考虑容量为0的时候,对应的大小。两个加起来和6比较
对于第三行来数
2,0 肯定是0,因为没有容量
2,1 此时只能放入价值为6的物品
2,2的时候,参考上面的最大值,因为容量是2,还不能考虑自身(容量3)
对于2,3
第一种是不考虑自身,那么最大值就是上面的16
第二张是考虑自身,把自己放进去刚好占满,价值是12,以及加上(1,0)【这种是0和1都考虑之后,容量为0的情况】
所以取两者最大值16
大前提:每个物品只能选一次
动态规划
空间复杂度的优化
交替使用
上面永远是i为偶数,下面永远是i为奇数
i只需%2即可
空间可以大很多很多
其实一行空间也可以
观察到每次只需要使用左边和上边的元素,根本不会碰到右边。
当现在要填1那一行的时候,从右边填起,根本不会有影响。
上一行的内容,就是自己。左边的内容,就是左边。
代码也更优雅