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; //向上向下找都無(wú)所謂,只要安一定的順序找就行了
}
bagMatrix[j][i] = (bagMatrix[j-1][i] > itemInBag ? bagMatrix[j-1][i] : itemInBag);//比較下現(xiàn)在的情況是不是比不動(dòng)要好 0+6 < 7 就不動(dòng) 因?yàn)樗悄孟旅嬉唤M的值進(jìn)行比較,所以永遠(yuǎn)不會(huì)可能出現(xiàn)已經(jīng)選過(guò)的情況。
}
}
}
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背包
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 我在進(jìn)行一些互聯(lián)網(wǎng)公司的技術(shù)筆試的時(shí)候,對(duì)于我來(lái)說(shuō)最大的難題莫過(guò)于最后的那幾道編程題了,這對(duì)算法和數(shù)據(jù)結(jié)構(gòu)有一定程...
- 很經(jīng)典的動(dòng)態(tài)規(guī)劃問(wèn)題,具體思路這里就不列出了,網(wǎng)上太多資料了。想要詳細(xì)理解的話(huà)可以去看背包九講這里分別列出,01背...
- 01背包問(wèn)題(注意看注釋?zhuān)?有N件物品和一個(gè)容量為V的背包。第i件物品的費(fèi)用是c[i],價(jià)值是w[i]。每種物品僅...
- 本文翻譯自TopCoder上的一篇文章: Dynamic Programming: From novice to ...
- 早上起來(lái)化個(gè)美美的妝再讀會(huì)書(shū)就出門(mén)上班了,開(kāi)過(guò)早會(huì)后就開(kāi)始一天的工作時(shí)間。 現(xiàn)在的狀態(tài)還不錯(cuò)哦~做事比較積極,狀態(tài)...