二维 dp[i][c] 表示什么
第 1 步:容量 0~6,一开始全是 0 第 2 步:第 1 件:从 6 倒着填到 2 第 3 步:第 2 件:从 6 倒着填到 3 第 4 步:每件只被算进一次 0 0 0 0 0 0 0 0 0 3 3 3 3 3 c 0 0 3 4
一维写法为什么必须倒着填
第 1 步:容量 0~6,一开始全是 0 第 2 步:第 1 件:从 6 倒着填到 2 第 3 步:第 2 件:从 6 倒着填到 3 第 4 步:每件只被算进一次 0 0 0 0 0 0 0 0 0 3 3 3 3 3 c 0 0 3 4
一维表最后长什么样
三件物品 (重3值8)、(重4值9)、(重5值11),容量 10,每件最多拿一次。运行下面这段程序,看整张一维表: #include <algorithm> #include <iostream> #include
那个 40 是怎么填出来的
回到「贪心」那条路线里的三件东西:(重6值30)、(重5值20)、(重5值20),容量 10。当时只说了最优解是 40,现在把它填出来: #include <algorithm> #include <iostream>
写二维 0/1 背包
补全 knap2d:dp[i][c] 是前 i 件、容量 c 时的最大价值。输出 dp[3][10]。 本路线的物品:(重 3 值 8)、(重 4 值 9)、(重 5 值 11),写成 vector<pair<int, int&
写一维 0/1 背包
补全 knap1d:只用一个一维数组,容量从大到小循环。输出容量 10 时的最大价值。 本路线的物品:(重 3 值 8)、(重 4 值 9)、(重 5 值 11),写成 vector<pair<int, int>>,
正着填和倒着填差在哪
把一维背包写两遍,只改容量循环的方向:knap1d 从大到小(已给出),knap_full 从小到大。同一批物品、同一个容量 10,输出「倒着填的答案/正着填的答案」。 本路线的物品:(重 3 值 8)、(重 4 值 9)、(重 5 值 1
完全背包和 0/1 差在哪
第 1 步:只有一件:重 3 值 8 第 2 步:容量 3 用了本行的容量 0 第 3 步:容量 6 用了本行的容量 3 第 4 步:容量 9 用了本行的容量 6 第 5 步:正着填:同一件被拿了三次 0 0 0 0 0 0 0 0 0 0
完全背包的一维写法怎么填(C++)
完全背包压成一维之后,容量应该【0】。
为什么正着填就对了
完全背包正着填是对的,因为【0】。