K12教育赛事综合服务平台
专注青少年竞赛题库网站
聚乐之家官方网站
下载聚乐之家官方App
0/1 背包(每件物品最多选一次)问题通常可用一维动态规划求解,核心C++代码如下:
for each item (w, v): for (int j = W; j >= w; --j) dp[j] = max(dp[j], dp[j-w] + v);
内层 j 必须从小到大,否则会漏解
内层 j 必须从大到小,否则同一件物品会被用多次
j 从大到小或从小到大都一样
只要 dp 初始为 0 ,方向无所谓