動態規劃之0 1揹包問題

2021-09-30 16:50:45 字數 1077 閱讀 3684

學習動態規劃,一開始一頭霧水,看了好多部落格,寫的都是不太適合自己,這篇部落格寫得通俗易懂其實懂了思想,寫**寫起來就比較簡單了。在這裡寫一下個人的理解:通過把問題分解為更小規模的問題,分到最小的時候肯定會有乙個邊界,然後從邊界開始反過來求解。有點類似於遞迴,不過動態規劃是用陣列或者其他的東西,先把小規模的問題的解存入了陣列中,就不用重複計算,提高了效率。詳細的講解還是看參考的部落格吧

package backpack;

//0-1揹包問題

//給定n種物品和一揹包。物品i的重量是wi,其價值為vi,揹包的容量為c。問應如何選擇裝入揹包的物品,使得裝

//入揹包中物品的總價值最大

//資料:物品個數n=5,物品重量w[n]=,物品價值v[n]=,

public class package_0_1; //物品的重量

private int v = ; //物品對應的待加

private boolean x = new boolean[5]; //記錄對應的物品有沒有裝入揹包,false表示沒有裝入

private int m=new int[5][11]; //狀態量,記錄最大價值

public package_0_1()

public void getmaxvalue()

//揹包的容量裝不下物品,當然價值就是0

else

}//接著在最後一行填充的基礎上,從倒數第二行開始,從左往右,從底往上填充價值陣列m

for(int i=index-1;i>=0;i--)

else }}

system.out.println("最大價值為:"+m[0][10]);

int j=c;

for(int i=0;i}

//對於最後一件物品,如果m[i][j]不為0,就是放入了揹包

x[w.length-1]=m[w.length-1][j]==0?false:true;

//輸出選擇的狀態,也就是選擇了哪幾個物品

for(int i=0;i}

}public static void main(string args)

}

動態規劃之01揹包問題

首先是問題描述 給定n種物品和一揹包,物品i的重量是wi,其價值是pi,揹包的容量是m,問如何選擇裝入揹包中的物品總價值最大?可以這樣理解 揹包的揹負有上限,因此在這個上限內盡可能多的裝東西,並且價值越多越好。在這裡我之想討論動態規劃解決這個問題的詳細過程。動態規劃是用空間換時間的一種方法的抽象。其...

動態規劃之0 1揹包問題

問題描述 現有n件物品和乙個容量為c的揹包。第i件物品的重量是重量為w i 價值是v i 已知對於一件物品必須選擇取 用1表示 或者不取 用0表示 且每件物品只能被取一次 這就是 0 1 的含義 求放置哪些物品進揹包,可使這些物品的重量總和不超過揹包容量,且價值總和最大。求解思路 0 1揹包問題的遞...

動態規劃之0 1揹包問題

問題描述 0 1揹包問題是應用動態規劃設計求解的典型例題 已知n種物品和乙個可容納c重量的揹包,物品i的重量為w i 產生的效益為p i 在裝包時物品i可以裝入,也可以不裝,但不可拆開裝。問如何裝包,所得裝包總效益最大。演算法分析 最優子結構特性 0 1揹包的最優解具有最優子結構特性。與一般揹包問題...