叠放箱子

这一道题目有一个很容易想到的状态

但是这里的状态描述有一点点问题,不应该说“不超过”,而应该说“刚好为”

然而内存肯定不够,此时我们的思路肯定就是利用数组的值去存储总重量,也就是

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]\)

posted @ 2024-01-26 22:21  最爱丁珰  阅读(2)  评论(0编辑  收藏  举报