现有 n 个物品,第 i 个物品的体积为 vi , 重量为 wi
求当前背包最多能装多大重量的物品?
数据范围: , , ,
进阶 :
10,2,[[1,3],[10,4]]
4
第一个物品的体积为1,重量为3,第二个物品的体积为10,重量为4。只取第二个物品可以达到最优方案,取物重量为4
10,2,[[1,3],[9,8]]
11
两个物品体积之和等于背包能装的体积,所以两个物品都取是最优方案
function knapsack( V , n , vw ) { // write code here if (V == 0 || n == 0 || vw.length == 0) { return 0; } const dp = Array.from(new Array(n+1),()=>new Array(V+1).fill(0)) for(let i = 1;i<=n;i++){ for(let j = 1;j<=V;j++){ if(j<vw[i-1][0]){ dp[i][j] = dp[i-1][j] }else{ let v1 = dp[i-1][j] let v2 = dp[i-1][j-vw[i-1][0]]+vw[i-1][1] dp[i][j] = Math.max(v1, v2) } } } return dp[n][V] }