java動態規劃(揹包問題)

2021-09-25 00:15:01 字數 854 閱讀 7628

5kg的袋子

物品:物品只有乙個,且不能拆分。

錢:6 10 12

kg:1 2 4

我們把5kg袋子拆分成1kg 1kg這樣的來計算,每個格仔的意思就是當前袋子在這個容量下能裝的最大價值。

行表示每次加的物品

1kg2kg

3kg4kg

5kg加第乙個物品66

666加第二個物品

6(取上面第乙個)

1016

1616

加第三個物品610

1616

18第二個進來時,如果此時袋子為2kg,我們知道在第乙個物品進來時,2kg最多能裝6塊錢。,這時候如果我們選擇裝第二物品那麼袋子裡面的錢為10塊,然後剩餘0kg,那麼物品1就不能裝了。然後發現10塊大於袋子裡面原來的6快,所以我們選擇裝第二個 丟掉第乙個。

第三個物品進來,如果此時袋子為5kg,我們如果選擇加第三個物品,那麼袋子容積還剩1kg,能得12塊,我們找到上一列1kg袋子的最大價值,為6,所以總的為18.

核心思想:

分解子問題,通過區域性最大值得到全域性最大。

public class dq ;		//每個物品的錢

int weight = ; //每個物品的重量 和上面的一一對應

int w = 50; //袋子的容積

int n = 3; //物品的個數

int dp = new int[n+1][w+1]; //表示分割,成乙個 小的**

for(int i = 1; i<=n ;i++) else }}

system.out.println("袋子能裝的最大價值:" + dp[n][w]);

}}

01揹包問題(java,動態規劃)

一 問題描述 01揹包即每個物品最多放乙個 01 揹包問題 給定 n 種物品和乙個容量為 c 的揹包,物品 i 的重量是 wi,其價值為 vi 問 應該如何選擇裝入揹包的物品,使得裝入揹包中的物品的總價值最大?二 理論解釋 宣告乙個 大小為 m n c 的二維陣列,m i j 表示 在面對第 i 件...

動態規劃 揹包問題

給定n個物品,重量是,價值是,包的容量 承重 是w 問,放入哪些物品能使得包內價值最大 1 需要將問題轉化為子問題,通過遞迴實現,且子問題必然與父問題存在關聯 2 定義v i,j 表示為,當item取自前i個items且揹包capacity j 時,揹包問題的最優解,也即最高的價值。3 從前i個it...

動態規劃 揹包問題

不廢話,直接上 動態規劃,揹包問題。輸入為 int n 物品的種類數。int n weight 各件物品的重量。int n value 各種物品的價值。int w 揹包最大的裝載重量。輸出 v n b 的值,最大的裝載價值。x n 各類物品的裝載數量。author huangyongye publi...