0/1 背包用一维 DP 求解,核心代码如下,下面说法正确的是:
for each item (w, v):
for (int j = W; j >= w; --j)
dp[j] = max(dp[j], dp[j-w] + v);
- A. 内层 j 必须从小到大,否则会漏解
- B. 内层 j 必须从大到小,否则同一件物品会被用多次
- C. j 从大到小或从小到大都一样
- D. 只要 dp 初始为 0,方向无所谓
正确答案:B
for each item (w, v):
for (int j = W; j >= w; --j)
dp[j] = max(dp[j], dp[j-w] + v);
正确答案:B
想系统刷完 GESP C++ 1~8 级真题,并查看每道题的逐题精讲?
进入 GESPPASS 开始练习