<script>
var proDuctNum = 5;
var MaxCapicity = 15;
var ValueArr = [4, 5, 10, 11, 13];
var Capicity = [3, 4, 7, 8, 9];api
function Package_Value(Num, MaxCapicity, ValueArr, CaArr) {
var result = [];
for(var i = 0; i < Num + 1; i++) {
result.push([]);
}
for (var i=0;i<Num+1;i++) {
for (var j=0;j<MaxCapicity;j++) {
result[i][j]=0;
}
}
for (var i=1;i<Num;i++) {
//索引值的區分在此時異常重要
//從一開始是由於在循環放入第一件的時候將出現空指針-》undefined
//01揹包的動態規劃的核心就是由上一次的結果來決定下一次的結果,每一個物品的容量
//當能夠j的大小能夠裝下第i(索引值!!)物品時,就出現了兩種狀況
//第一種:在裝了第i件物品的剩餘容量中裝i-1件物品,若是裝了 以後大於以前i-1件物品的價值,就裝
//第二種:若是裝了以後自己價值並無增長,就不裝,恢復到以前i-1件物品的價值
for(var j=1;j<MaxCapicity;j++){
if (CaArr[i-1]<=j) {
//物品時i件,可是此時的容量值是CaArr[i-1];
if (result[i-1][j]<(result[i-1][j-CaArr[i-1]]+ValueArr[i-1])) {
//resuit[n][m],指的是裝第n件物品,且容量是m的時候
result[i][j]=result[i-1][j-CaArr[i-1]]+ValueArr[i-1];
//第i件物品,可是第i件物品的Value是ValueArr[i-1];
} else{
result[i][j]=result[i-1][j];
}
} else{
result[i][j]=result[i-1][j];
}
}
}
return result;
}
function Func_sort(arr){
var Max=0;
var temp=0;
for (var i=0;i<arr.length;i++) {
temp=arr[i].sort(function(num1,num2){
return num1-num2;
})
temp=arr[i][arr[i].length-1];
if (temp>Max) {
Max=temp;
}
}
return Max;
}
console.log("最大的結果是"+Func_sort(Package_Value(proDuctNum, MaxCapicity, ValueArr, Capicity)))
</script>ui