01揹包問題(dp)

2021-10-02 11:44:05 字數 798 閱讀 5520

思路:填表。

以下有幾種情況:

情況一: 第j件放不進去(當前容量i小於第i件物品),

這時所得價值為:dp[i][j]=dp[i] [j-1]

情況二: 第j件不放進去(容量足夠),

這時所得價值為:dp[i][j]=dp[i] [j-1]

情況三: 第j件放進去(容量足夠),

這時所得價值為:dp[ i-weigh[j] ] [j-1]+value[j]

/*問題描述:有編號分別為a,b,c,d,e的五件物品,

它們的重量分別是2,2,6,5,4,它們的價值分別是6,3,5,4,6,

每件物品數量只有乙個,

現在給你個承重為10的揹包,

如何讓揹包裡裝入的物品具有最大的價值總和?答案是15*/

/*輸入

6 23 2

5 64 5

6 4*/

#include

intmax

(int a,

int b)

else

}int

main()

for(j=

0;j<=

5;j++

)//j表示選擇範圍是前j個物品

else

if(weigh[j]

>i)

else

if(i>=weigh[j])}

}printf

("%d"

,dp[10]

[5])

;return0;

}

01揹包問題優化

01揹包問題 dp

這道題需要從定義去理解 dp i 1 j 定義為 在前i個物品裡面選出來的總體積不大於j的最大的價值 所以這樣就可以知道了,dp i 1 j 就表示在前i個物體裡面選出來的不超過給定體積的最大價值了 所以清楚定義後就有 如果當前超過了當前體積了 那麼他肯定就是dp i 1 j dp i j 了 如果...

01揹包問題 DP

有 n件物品和乙個容量是 v 的揹包。每件物品只能使用一次。第 i件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 n 行,每行兩個整數 vi,wi,用...

0 1揹包問題(DP)

揹包問題具體例子 假設現有容量10kg的揹包,另外有3個物品,分別為a1,a2,a3。物品a1重量為3kg,價值為4 物品a2重量為4kg,價值為5 物品a3重量為5kg,價值為6。將哪些物品放入揹包可使得揹包中的總價值最大?首先想到的,一般是窮舉法,乙個乙個地試,對於數目小的例子適用,如果容量增大...