首页 > 其他 > 详细

01背包

时间:2021-05-23 17:11:02      阅读:14      评论:0      收藏:0      [点我收藏+]

题目:已知一个背包最多能容纳物体的体积为V。现有n个物品第i个物品的体积为vi? 第i个物品的重量为wi?。求当前背包最多能装多大重量的物品

说明:第一个物品的体积为1,重量为3,第二个物品的体积为10,重量为4。只取第二个物品可以达到最优方案,取物重量为4 

思路:

代码:

 1 /**
 2  * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 3  * 计算01背包问题的结果
 4  * @param V int整型 背包的体积
 5  * @param n int整型 物品的个数
 6  * @param vw int整型二维数组 第一维度为n,第二维度为2的二维数组,vw[i][0],vw[i][1]分别描述i+1个物品的vi,wi
 7  * @return int整型
 8  */
 9 function knapsack( V ,  n ,  vw ) {
10     // write code here
11     if(V === 0 || n === 0 || vw.length === 0){
12         return 0;
13     }
14     const dp = Array.from(new Array(n+1),()=>new Array(V+1).fill(0));
15     for(let i = 1; i <= n;i++){
16         for(let j = 1; j <= V; j++){
17            if (j - vw[i -1][0] < 0) {
18                 dp[i][j] = dp[i -1][j]
19             } else {
20                 dp[i][j] = Math.max(
21                     dp[i -1][j],
22                     dp[i - 1][j - vw[i -1][0]] + vw[i - 1][1]
23                 )
24             }
25         }
26     }
27     return dp[n][V]
28 }
29 module.exports = {
30     knapsack : knapsack
31 };

 

01背包

原文:https://www.cnblogs.com/icyyyy/p/14801377.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!