用js实现动态规划解决背包问题

动态规划的原理:

移至到该同学的博文中,讲解的声动易懂 https://www.jianshu.com/p/a66d5ce49df5

现在主要是用js来实现动态规划

function bb(v, w, total) {
      var maxValue = [];//用来存储所有的最优值的二维数组
      //i行表示物品种类,j列表示容量,v是价值,w是容量,total是总容量限制
      //表中的每一个值,都是最优值
      //每次都从小容量开始计算,逐步增加到大容量
      for (var i = 0; i < w.length; i++) {
        var row = [];
        for (var j = 0; j <= total; j++) {
          //第一行,只有一个物品可以选择,所以,只要该物品的容量小于该列限定的容量,
          //都可以放进去,并且为当前的最优值
          if (i == 0) {
            if (w[i] <= j) {
              row[j] = v[i];
            } else {
              row[j] = 0;
            }
          } else {
            //从第二行开始,有第二种物品可以放进来
            if (w[i] <= j && (v[i] + maxValue[i-1][j - w[i]] > maxValue[i - 1][j])) {
              //如果第二行的物品的容量小于规定容量,并且还有剩余容量,那么从之前的最优解里面取出剩余容量的最大价值
              //两者相加为当前的最优解,如果当前的最优解,是大于该容量下的上一行存储的价值,则存储该值,否则继续沿用上一行的最优解
              row[j] = v[i] + maxValue[i-1][j - w[i]] || 0;
            } else {
              //该物品容量超过,则沿用上一行的最优解
              row[j] = maxValue[i - 1][j];
            }
          }
        }
        maxValue.push(row);
      }
      console.info(maxValue);
    }
    var v = [4, 5, 6];
    var w = [3, 4, 5];
    bb(v, w, 10);

原文地址:https://www.cnblogs.com/panyujun/p/10682713.html

时间: 2024-10-10 08:58:53

用js实现动态规划解决背包问题的相关文章

动态规划解决0-1背包问题

这几天算法老师布置了一个作业是关于背包问题的,在这里记录一下解决的过程: 一:背包问题的描述 有n1,n2,n3....个物品,每个物品的重量为w1,w2,w3.....,每个物品的价值为v1,v2,v3....,现在有一个承重量为C的背包,求出要怎样放物品才能使的装入背包的物品价值总和最大.由于每个物品只有一个,并且只能选择放或不放,因此用0表示物体没有放进背包中,1表示物体放进背包中 二:分析过程(以具体的例题来分析) 题目描述: 现有一个可以承重为6的背包bag,以及3个物品,它们的重量分

动态规划:背包问题

例题:装箱问题 ( http://www.wikioi.com/problem/1014/  ) 题目描述 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数). 要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入描述 一个整数v,表示箱子容量,一个整数n,表示有n个物品 接下来n个整数,分别表示这n 个物品的各自体积 输出描述 一个整数,表示箱子剩余空间. 样例输入 24 6 8 3 12 7 9 7

利用servlet做转发,实现js跨域解决同源问题

做前端开发,避免不了跨域这个问题,跨域具体什么概念,不赘述,博客里太多.简单说下,我们用js发请求,不管post还是get,如果发请求的对象和当前web页面不在同一域名下,浏览器的同源策略会限制发请求,也就是说,如果单独写个HTML,用js发远程请求,是发布出去的,浏览器会认为这是不安全的,js在这里能做的很有限. 网上看了很多文章,小弟愚钝,只用js一直没解决这个问题,jQuery的Ajax据说可以,但是测试后发现不行,也许是浏览器版本的原因.有种方法是jsonp,但是好像需要服务器支持,我对

动态规划解决最长公共子序列问题(转)

原文链接 动态规划法 经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题.简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加. 解决思想: 为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法. [问题] 求两字符序列的最长公共字符子序列 问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后

算法导论三剑客之 动态规划 0-1背包问题

1 #include "iostream" 2 using namespace std; 3 4 float MAX(float m1,float m2){ 5 if(m1>=m2) 6 return m1; 7 else 8 return m2; 9 } 10 11 float bag_Zero_One(int n,float v,float p[],float w[]){ 12 if(n==0||v==0) 13 return 0; 14 else{ 15 float m2;

Xcode编译WebApps找不到js的错误解决办法&lt;转&gt;

使用Xcode做WebApps时,使用UIWebview来调用一个页面,有时会遇到问题,其一就是编译的时候出现黄色感叹号的Warning,js文件都报错:warning: no rule to process file '$(PROJECT_DIR)/jquery-1.8.1.min.js' of type sourcecode.javascript for architecture i386 错误原因是:js和html等资源文件加入到project的时候,Xcode错误的将js文件都放到了编译

eclipse中加放js文件报js语法错误解决办法

1) eclipse设置         window->preference-> JavaScript -> Validator->Errors/Warnings->Enable Javascript Sematic validation前面的钩号去掉 2) .project文件    下面的代码删除 <buildCommand> <name>org.eclipse.wst.jsdt.core.javascriptValidator</name

动态规划——0-1背包问题

 0-1背包问题: 描述:给定n中物品和一背包.物品i的重量是wi,其价值为vi,背包的容量为c,问应如何选择装入背包中的物品,使得装入背包中的物品总价值最大? 0-1背包问题是一个特殊的整数规划问题. 设所给0-1背包问题的子问题; 其最优值为m(i,j),即m(i,j)是背包容量为j,可选择物品为i,i+1,-,n时0-1背包问题的最优值.由0-1背包问题的最优子结构性质,可以建立计算m(i,j)的递归式如下: NO1:递归实现 1 /* 2 *Description 递归实现 3 *设有一

动态规划01背包问题

动态规划0-1背包问题 ? 问题描写叙述: 给定n种物品和一背包.物品i的重量是wi,其价值为vi,背包的容量为C.问应怎样选择装入背包的物品,使得装 入背包中物品的总价值最大? ? 对于一种物品,要么装入背包,要么不装.所以对于一种物品的装入状态能够取0和1.我们设物品i的装入状态为xi,xi∈ (0,1),此问题称为0-11背包问题. 过程分析 数据:物品个数n=5,物品重量w[n]={0,2,2,6,5,4},物品价值V[n]={0,6,3,5,4,6}, (第0位,置为0,不參与计算,仅