两种规则各是多少

三件 (重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 编译。)

开始练习 →

一份代码只换一个方向

写一个 knap(items, cap, back):back 为真时容量倒着循环(0/1 背包),为假时正着循环(完全背包)。输出「0/1 的答案/完全的答案」。 本路线的物品:(重 3 值 8)、(重 4 值 9)、(重 5 值 11)

开始练习 →

滚动数组在做什么

第 1 步:两行就够:旧的一行、新的一行 第 2 步:第 1 件:由旧行算出新行 第 3 步:新行变成下一轮的旧行 第 4 步:第 2 件:由旧行算出新行 第 5 步:新行变成下一轮的旧行 第 6 步:第 3 件:由旧行算出新行 第 7 步

开始练习 →

什么时候能滚(C++)

一个 DP 能用滚动数组,条件是【0】。

开始练习 →

滚了之后哪样没变(C++)

用滚动数组优化之后【0】。

开始练习 →

两张表各占多少格

三件物品、容量 10。二维表是 (件数+1) × (容量+1),一维表就是 容量+1。运行下面这段程序: #include <algorithm> #include <iostream> #include <s

开始练习 →

两种写法算得一样吗

二维写法取 dp[3][10],一维写法取 dp[10]。运行下面这段程序: #include <algorithm> #include <iostream> #include <string> #inc

开始练习 →