答案和用掉的格子一起报
写出一维版,输出答案和这张表一共有多少格。
阅读更多 →
把二维改成一维
下面给的是二维版。把它改写成只用一个一维数组的版本,输出容量 10 的最大价值。
阅读更多 →
两种写法算得一样吗
二维写法取 dp[3][10],一维写法取 dp[10]。运行下面这段程序: def knap2d(items, cap): dp = [[0] * (cap + 1) for _ in ra
阅读更多 →
两张表各占多少格
三件物品、容量 10。二维表是 (件数+1) × (容量+1),一维表就是 容量+1。运行下面这段程序: items = [(3, 8), (4, 9), (5, 11)] cap = 10 two
阅读更多 →
滚了之后哪样没变
用滚动数组优化之后【0】。
阅读更多 →
什么时候能滚
一个 DP 能用滚动数组,条件是【0】。
阅读更多 →
滚动数组在做什么
滚动数组的做法是【0】。
阅读更多 →
⚠️ 一份代码,只换一个方向
写一个函数 knap(items, cap, back):back 为真时容量倒着循环(0/1 背包),为假时正着循环(完全背包)。 把两种调用的答案拼起来输出(0/1 在前)。
阅读更多 →
零钱兑换:有几种组合
同样的面值和金额,这次问有几种不同的组合(只看用了哪些面值各几枚,不看先后顺序)。
阅读更多 →
零钱兑换:最少几枚
面值 [2, 3, 7],每种数量不限,凑出 12。补全 coin_min,输出最少要几枚。 (这就是完全背包,只不过求的是最小值。)
阅读更多 →