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...