1. 程式人生 > >動態規劃——01揹包問題

動態規劃——01揹包問題

package pack01;

public class PackTest_01 {

    public static void main(String[] args) {         // TODO Auto-generated method stub             test();     }     public static void test(){         int[] weight={0,2,2,6,5,4};      //定義物品的重量         int[] value={0,6,3,5,4,6};        //定義物品的價值         int[][] c=new int[6][11];       //c[ i ][ j ] 表示 在面對第 i 件物品,且揹包容量為  j 時所能獲得的最大價值          boolean flag=true;            //初始化陣列         for(int i=1;i<=5;i++){            //i表示第i件物品             for(int j=1;j<=10;j++){            //j表示揹包的容量                 if(flag==true){                     if(weight[1]<=j){      //當第一個物品重量小於容器(陣列)重量的時候,將其價值賦值給陣列                         c[i][j]=value[1];                         flag=false;                     }                 }                 else{                     if(weight[i]>j){     //當物品重量大於j時,不拿                         c[i][j]=c[i-1][j];                     }else{                         c[i][j]=max(c[i-1][j-weight[i]]+value[i],c[i-1][j]);                                 //當物品重量小於等於j時,                         //這裡的c[ i-1 ][ j-weight[ i ] ]指的就是考慮了i-1件物品,揹包容量為j-weight[i]時的最大價值                     }                 }             }         }         System.out.println(c[5][10]);     }     public static int max(int a, int b){         return a>b?a:b;     }

}