一张表解释01背包问题

背包问题的概述:

已知背包容量为m,有一堆物品(n个),每个物品都有重量w_i和价值v_i,求解怎么放物品能让拿到的东西价值达到最大。

一道测试用例:

10 4
3 10
4 11
5 12
6 13

dp数组可视化:

操作 n\m 1 2 3 4 5 6 7 8 9 10
输入3 10 1 0 0 10 10 10 10 10 10 10 10
输入4 10 2 0 0 10 11 11 11 21 21 21 21
输入5 12 3 0 0 10 11 12 12 21 22 22 22
输入6 13 4 0 0 10 11 12 13 21 22 23 24

答案和输入顺序无关,因为 dp[i][j]=max(dp[i-1][j-w]+value,dp[i-1][j]) 会自动调整当前最优解。

你可能感兴趣的:(算法,算法,蓝桥杯,c语言)