美文网首页
01 01背包

01 01背包

作者: 张霸天 | 来源:发表于2017-08-18 12:34 被阅读0次

function PackageItem (name, weight, value){
    this.name = name;
    this.weight = weight;
    this.value = value;
}

function get01PackageAnswer(bagItems , bagsize) {
    var bagMatrix = [];
    var i ;
    var item;

    for (i = 0; i < bagItems.length; i++) {
        bagMatrix[i] = [0];
    }

    for (i = 1; i <= bagsize;i++) {
        for (var j = 0; j < bagItems.length; j++) {
            item = bagItems[j];
            if (item.weight > i) 
            {
                if (j==0) {
                    bagMatrix[j][i] = 0;
                } else {
                    bagMatrix[j][i] = bagMatrix[j-1][i];
                }
            }
            else 
            {
                var itemInBag;
                if (j == 0) {
                    bagMatrix[j][i] = item.value;
                    continue ;
                } else {
                    itemInBag = bagMatrix[j-1][i-item.weight] + item.value; //向上向下找都无所谓,只要安一定的顺序找就行了
                }
                bagMatrix[j][i] = (bagMatrix[j-1][i] > itemInBag ? bagMatrix[j-1][i] : itemInBag);//比较下现在的情况是不是比不动要好 0+6 < 7 就不动 因为他是拿下面一组的值进行比较,所以永远不会可能出现已经选过的情况。
            }
        }
    }

    var answers = [];
    var curSize = bagsize;

    for ( i = bagItems.length - 1; i >= 0; i--) {
        item = bagItems[i];
        if (curSize == 0) 
            break;
        
        if (i == 0 && curSize  > 0) {
            answers.push(item.name);
            break;
        }

        if (bagMatrix[i][curSize] - bagMatrix[i-1][curSize - item.weight] == item.value) {
            answers.push(item.name);
            curSize -= item.weight;
        }
    }
    return answers;
}

var nameArr = ['a','b','c','d','e'];
var weightArr = [2,2,6,5,4];
var valueArr = [6,3,5,4,6];


var bagItems = [];

for (var i = 0; i < nameArr.length; i++) {
    var bagItem = new PackageItem(nameArr[i],weightArr[i],valueArr[i]);
    bagItems[i] = bagItem;
}

var arr = get01PackageAnswer(bagItems,10);

arr.forEach(function(item,index,array) {
    console.log(item);
})



相关文章

  • 动态规划-背包问题

    01背包问题 详解:01背包问题详解链接

  • 算法模板(一) 01背包,多重背包,完全背包

    01背包 多重背包 完全背包

  • 01 01背包

  • 01背包

    转自背包九问:http://love-oriented.com/pack/P01.html P01: 01背包问题...

  • DP小结

    DP种类 线性DP 区间DP 树形DP 背包DP01背包满背包完全背包(转成01背包) 例子:线性动规:拦截导弹,...

  • 01-背包、完全背包、多重背包及其相关应用

    本文介绍了背包问题系列,主要包括: 【1】 01-背包及其应用【2】完全背包及其应用【3】多重背包 【1】01-背...

  • 01背包

    题目: 有N种物品(每种物品只有一件)和一个容量为V的背包。放入第i件物品耗费的费用为Ci,得到的价值是vi,求解...

  • 01背包

    01背包的问题很早就想写了,但是因为一些意外的事情耽搁了下来今天补习一下01背包问题的计算过程。首先,01背包的问...

  • 01背包

    1. 问题 给定背包承重W,对于n件物品(每件物品重量wi,价值vi),在背包的承重范围内,可以带走的物品价值总和...

  • 01背包

    public class Knapsack_01 {public static int getBiggestVal...

网友评论

      本文标题:01 01背包

      本文链接:https://www.haomeiwen.com/subject/fkfarxtx.html