背包算法练习--求小于某数字的数组最大和:

思路:

1. 假设当前剩余总和小于最大值:

a.循环当前剩余数字

b.递归运行

c. 用一个变量bestS存小于最大值情况下的最大总和


var bestS = {val:0,str:""};
var LIMIT ;

Array.prototype.sum = function(){
var s = 0;
for(var i = 0;i < this.length;i++){
s+= this[i];
}
return s;
}


function f(bagArr,copyArr,start){
var arrS = copyArr.sum();

if(arrS < LIMIT && arrS > bestS.val){
bestS = arrS > bestS.val ? {val:arrS,str:copyArr.join(',')} : bestS; 
}

for(var i = start;i<bagArr.length;i++){

copyArr.push(bagArr[i]);
f(bagArr,copyArr,i+1);
copyArr.splice(copyArr.length-1,1);

}

}

LIMIT = 197;
f(new Array(49,28,119,50,78,48,29,49,52,48,29,49,52,48,29,49,52),new Array(),0);
console.log(bestS);





原文地址:https://www.cnblogs.com/clnchanpin/p/6791582.html