動態規劃——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; }
}