背包问题

Knapsack Problem · 动态规划

? 问题描述

有一个容量为 W = 10 的背包, 现有 n = 5 个物品, 每个物品有对应的重量和价值。求在不超过背包容量的情况下,如何选择物品使得总价值最大。

物品清单

背包状态

0 / 10

已用容量

T DP 状态表

dp[i][w] 表示前 i 个物品在容量 w 下的最大价值

状态转移方程

if w < weight[i]:
  dp[i][w] = dp[i-1][w]
else:
  dp[i][w] = max(dp[i-1][w], dp[i-1][w-weight[i]] + value[i])

! 步骤讲解

点击播放按钮开始演示背包问题的动态规划求解过程。

演示将展示:

  • 如何逐行填充 DP 表格
  • 每个单元格的计算过程
  • 状态转移方程的应用
  • 最终最优解的回溯