動態規劃 揹包演算法 JS實現

2021-08-17 09:18:36 字數 1251 閱讀 6828

昨天面試時遇到乙個揹包演算法的題目,和傳統的

揹包稍有不同,是給定揹包的容量和各種物品的重量,要求放入物品的總質量盡可能接近揹包的容量並小於揹包的容量,且放入的物品數目最少。

以下是我自己根據理解編寫出來的**。

function backpack() 

//加物品

this.addthing = function(goods)

//減物品

this.removething = function(goods)

})if(index)

else

}//計算最優解揹包的重量

this.count = function()

//傳入物品列表,返回該列表所有物品總質量

function getlistweight(list) )

return weight

}//滿足盡可能接近揹包重量且放入物品最少的方法

this.getbestmethod = function()

else if(getlistweight(newarr) === getlistweight(arr[i - 1][j]) && arr[i-1][j].length < newarr.length)

}arr[i][j] = newarr

}else

else}}

})return bestmethodlist = arr[goodslist.length-1][totalweight-1]}}

//測試

var mybag = new backpack()

mybag.settotalweight(10)

mybag.addthing()

mybag.addthing()

mybag.addthing()

console.log(mybag.getbestmethod())//最優解的陣列

console.log(mybag.count())//最優解的質量

其中的核心便是建立乙個二維陣列儲存區域性的最優解,然後慢慢推演,最後獲得最終的最優解。

演算法原理:

(i對應行,j對應列,建立二維陣列arr)

1.揹包剩餘質量 = 當前列對應的重質量 - 當前行物品的質量

2.新的arr = arr【i-1】【揹包剩餘質量】 + 當前物品 (用concat)

3.新的arr 和 上一行j列的arr對比  (如果初始條件不同,只需要改這裡即可)

4.依次得出arr

01揹包演算法 動態規劃(c 實現)

0 1揹包問題 給定n種物品和一揹包。物品i的重量是wi,其價值為vi,揹包的容量為c。問應如何選擇裝入揹包的物品,使得裝入揹包中的物品的總價值最大?在選擇裝入揹包的物品時,對每種物品i只有兩種選擇,即裝入揹包或不裝入揹包。不能將物品i裝入揹包多次,也不能只裝入部分的物品i。因此,該問題稱為0 1揹...

演算法 4 動態規劃揹包

容量 m kg 的揹包,另外有 i個物品,重量分別為 w 1 w 2 w i kg 價值分別為 p 1 p 2 p i 元 將哪些物品放入揹包可以使得揹包的總價值最大?最大價值是多少?我們要求得 i個物體放入容量為 m kg 的揹包的最大價值 記為 c i m 在選擇物品的時候,對於每種物品 i只有...

動態規劃 揹包

揹包經典問題 揹包問題01 乙個揹包容積為t 0 t 2000 現在有n 0 如下 includeusing namespace std int s 1005 bool f 3000 int main 揹包問題02 若每種物品有無限多個。從這n種物品中選取若干個裝入揹包內,使揹包所剩的空間最小。請求...