K12教育赛事综合服务平台
聚乐之家官方网站
下载聚乐之家官方App
专注青少年竞赛题库网站
已知01背包问题的常规二维动态规划实现中,状态定义为dp[i][j]表示前i件物品放入容量为j的背包的最大价值,状态转移方程为dp[i][j] = max(dp[i-1][j], dp[i-1][j - weight[i]] + value[i])。现需将二维DP数组优化为一维数组以将空间复杂度从O(n*V)降至O(V),其中n为物品数量,V为背包总容量。假设一维DP数组名为dp,下标对应背包容量,下列代码片段正确的优化实现是?
dp[i][j]
i
j
dp[i][j] = max(dp[i-1][j], dp[i-1][j - weight[i]] + value[i])
dp
for (int i = 0; i < n; i++) { for (int j = 1; j <= bagCapacity; j++) { if (j >= weight[i]) { dp[j] = max(dp[j], dp[j - weight[i]] + value[i]); } }
for (int i = 0; i < n; i++) { for (int j = bagCapacity; j >= weight[i]; j--) { dp[j] = max(dp[j], dp[j - weight[i]] + value[i]); }
for (int i = 0; i < n; i++) { for (int j = weight[i]; j <= bagCapacity; j++) { dp[i][j] = max(dp[i][j], dp[i][j - weight[i]] + value[i]); }
for (int j = bagCapacity; j >= 0; j--) { for (int i = 0; i < n; i++) { if (j >= weight[i]) { dp[j] = dp[j - weight[i]] + value[i]; } }