Java語言之動態規劃實現01揹包

自己寫的,代碼直接可用。
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("物品。");
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章