叠放箱子
这一道题目有一个很容易想到的状态
但是这里的状态描述有一点点问题,不应该说“不超过”,而应该说“刚好为”
然而内存肯定不够,此时我们的思路肯定就是利用数组的值去存储总重量,也就是
update 2024.6.26
想到了一种新状态,应该是正确的(还没有写过对拍验证)
这种状态不用倒序
设\(f[i][j]\)表示前\(i\)个箱子,选出的箱子中所能承受的重量最少还有\(j\),所能选出的最多的箱子数(也就是选出的这些箱子中,剩余承重量最小的为\(j\))
如果\(j\)小于当前箱子的承重,那么有\(f[i][j]=min(f[i-1][j],f[i-1][j+weight[i]]+1)\)
如果\(j\)等于当前箱子的承重,那么有\(f[i][j]=min(f[i-1][j],f[i-1][k]+1),k≥j+weight[i]\)(所以这里要做一个后缀优化)
如果\(j\)大于当前箱子的承重,那么有\(f[i][j]=f[i-1][j]\)