动态规划 · 0-1 背包

每件物品只能取一次,容量有限——逐格填充 dp[i][c],高亮「取 / 不取」两种转移来源。

0-1 背包
01 / 42 步
0-1 背包:4 件物品,容量 8。行 = 物品前缀,列 = 容量,格子 = 最大价值。 比较 0 · 交换 0
伪代码

				
					
					1
					// 0-1 背包:dp[i][c] = 前 i 件物品、容量 c 的最大价值
				
			
				
					
					2
					for i = 1 to n:
				
			
				
					
					3
					  for c = 0 to C:
				
			
				
					
					4
					    if w[i] > c: dp[i][c] = dp[i-1][c]      // 放不下
				
			
				
					
					5
					    else: dp[i][c] = max(dp[i-1][c],        // 不取
				
			
				
					
					6
					                           dp[i-1][c-w[i]] + v[i])  // 取
				
			
				
					
					7
					  end for
				
			
				
					
					8
					end for
				
			
				
					
					9
					answer = dp[n][C]
				
			
01 / 42
速度