二维数组实现01背包

<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

相关文章
相关标签/搜索