package knapsack;
public class Knapsack_DynamicProgramming {
/*
* 使用動態規劃實現01揹包問題
*/
/**有4件物品*/
static final int n=4;
/**揹包最大承重爲9*/
static int maxWeight=9;
public static void main(String[] args) {
int weight[]={0,2,3,4,5};//4件物品的重量
int value[]={0,3,4,5,7};//4件物品的價值
int values[][]=new int[n+1][maxWeight+1];//存放當前子結構中的最優價值,用於輸出
for(int i=0;i<=maxWeight;i++)
values[0][i]=0;//第0行全爲0
for(int i=0;i<=n;i++)
values[i][0]=0;//第0列全爲0
for(int i=1;i<=n;i++){
for(int j=1;j<=maxWeight;j++){
if(j<weight[i])
values[i][j]=values[i-1][j];//如果物品i的重量超過揹包可放重量,將他上面的數即目前最優裝載數寫入
else{//可以將物品i放入揹包,需要從【目前最優】和【之前最優並加入當前物品】取大
values[i][j]=Math.max(values[i-1][j], values[i-1][j-weight[i]]+value[i]);
}
System.out.print(values[i][j]+" ");
}
System.out.println();
}
System.out.println();
System.out.print("最優值爲"+values[n][maxWeight]+",最優裝載爲 ");
for(int i=n;i>0;i--){
if(values[i][maxWeight]>values[i-1][maxWeight]){
System.out.print("第"+i+"件 ");
maxWeight-=weight[i];
}
}
System.out.print("物品。");
}
}
Java語言之動態規劃實現01揹包
自己寫的,代碼直接可用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.