写二维 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】。

开始练习 →

两种规则各是多少

三件 (重3值8)、(重4值9)、(重5值11),容量 10。一边每件只能拿一次,一边同一件能拿很多次。运行下面这段程序: #include <algorithm> #include <iostream> #incl

开始练习 →

写完全背包

补全 knap_full:同一件能拿很多次,容量从小到大循环。输出容量 10 的最大价值。 本路线的物品:(重 3 值 8)、(重 4 值 9)、(重 5 值 11),写成 vector<pair<int, int>>

开始练习 →

零钱兑换最少几枚

面值 2、3、7,每种数量不限,凑出 12。补全 coin_min,输出最少要几枚。(这就是完全背包,只不过求的是最小值。) (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

零钱兑换有几种组合

同样的面值和金额,这次问有几种不同的组合(只看用了哪些面值各几枚,不看先后顺序)。补全 coin_ways。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →