美文网首页
多重背包问题

多重背包问题

作者: 张霸天 | 来源:发表于2017-08-23 15:41 被阅读0次
function PackageItem(name, weight, value, count) {
    this.name = name;
    this.weight = weight;
    this.value = value;
    this.count = count;
}

function get01PackageAnswerFor2degree(bagItems, bagsize, countForItem) {
    var bagMatrix = [];
    var item;
    var answers = [];

    for (var i = 0; i <= bagItems.length; i++) {
        bagMatrix[i] = [];
        for (var j = bagsize; j >= 0; j--) {
            bagMatrix[i][j] = [];
            answers[j] = [];
            for (var k = countForItem; k >= 0; k--) {
                bagMatrix[i][j][k] = 0;
                answers[j][k] = [];
            }
        }
    }

    for (var tmpBagsize = 1; tmpBagsize <= bagsize; tmpBagsize++) {
        for (var tmpCount = 1; tmpCount <= countForItem; tmpCount++) {
            for (var tmpItemID = 0; tmpItemID < bagItems.length; tmpItemID++) {
                item = bagItems[tmpItemID];
                if (item.weight > tmpBagsize) {
                    if (tmpItemID == 0) {
                        bagMatrix[tmpItemID][tmpBagsize][tmpCount] = 0;
                    } else {
                        bagMatrix[tmpItemID][tmpBagsize][tmpCount] = bagMatrix[tmpItemID - 1][tmpBagsize][tmpCount];
                    }
                } else {
                    if (item.count > tmpCount) {
                        if (tmpItemID == 0) {
                            bagMatrix[tmpItemID][tmpBagsize][tmpCount] = 0;
                        } else {
                            bagMatrix[tmpItemID][tmpBagsize][tmpCount] = bagMatrix[tmpItemID - 1][tmpBagsize][tmpCount];
                        }
                    } else {
                        var itemInBag;
                        if (tmpItemID == 0) {
                            bagMatrix[tmpItemID][tmpBagsize][tmpCount] = item.value;
                            continue;
                        } else {
                            itemInBag = bagMatrix[tmpItemID - 1][tmpBagsize - item.weight][tmpCount - item.count] + item.value; //向上向下找都无所谓,只要安一定的顺序找就行了
                            bagMatrix[tmpItemID][tmpBagsize][tmpCount] = Math.max(bagMatrix[tmpItemID - 1][tmpBagsize][tmpCount], itemInBag); //比较下现在的情况是不是比不动要好 0+6 < 7 就不
                        }

                        
                    }
                }
            }
        }
    }

    return bagMatrix[bagItems.length - 1][bagsize][countForItem];
}

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


var bagItems = [];

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

console.log(answ);

相关文章

  • 一刷到底。。

    归并快排堆排序模拟堆01背包完全背包问题多重背包问题多重背包问题2链表排序多链表合并字符串哈希字典树单调栈单调队列...

  • 多重背包问题

  • 多重背包问题

    多重背包问题(限制其物品的个数,介于无限和唯一之间) 一种方法是压入k个物品i,转变成01背包问题,但是还可以简化...

  • 背包问题3(多重背包)

    上一篇讲的完全背包是指在所有物品件数无限多的情况下选择最值,现在引申出多重背包问题,即各物品个数w[ i ]均有限...

  • 背包

    多重背包多重背包模板

  • 背包系列问题之--多重背包问题

    题目描述 小偷深夜潜入一家珠宝店,店里有5类宝物,体积分别为W{1,3,2,4,5},对应的价值为V{200,10...

  • 背包问题

    背包问题属于典型的动态规划问题。这里我们将详细介绍0-1背包,完全背包和多重背包问题 一、 0-1背包 有N件物品...

  • 算法-动态规划-背包问题

    背包问题是基础的动态规划问题,包含了0-1背包,完全背包,多重背包等。 0-1背包 存在容量为 的背包 , 件体...

  • java算法巩固训练day01

    01背包 完全背包 多重背包 多重背包二进制优化算法

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

    01背包 多重背包 完全背包

网友评论

      本文标题:多重背包问题

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