經典動規 01揹包

2021-09-19 14:20:28 字數 837 閱讀 9608

問題描述:給定n個物品,每個物品有乙個重量w和價值v,你有乙個能裝m重量的揹包,問怎麼裝使得所裝價值最大,每個物品只有乙個。

如:n = 3, m = 5, wi = ; vi = ;   

結果返回最大價值為:8

首先來填乙個**-->

第一,如果揹包容量比該物品重量小,要不起,此時的價值等於[i - 1][ j ]格中的價值。

第二,如果揹包容量可以裝下該物品,要的起,但是會存在裝了之後不一定價值超過沒裝之前。所以要在要和不要之間取乙個最大值,要的話就得從當前揹包容量減去物品重量,再從剩下容量的那一列去找,再加上要拿的物品價值。

即dp[i][j] = max( dp[i-1][j], dp[i-1][j - w[i] ] + v[i] );

一定要記得初始化第一行,如果j>=w[i],dp[0][j] = v[0];否則的話就是要不起dp[0][j] = 0;

下面直接上**:

public class _01_knapsack ;

private static int v = ;

public static void main(string args)

public int dp()else

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

}} return dp[n-1][m];//**右下角為最大價值

}}

演算法學習 01揹包(動規)

貪心之後來動規啦 看 演算法導論 感覺還是不那麼清楚,還是得自己動手才行 真正寫的時候發現還是沒有真正理解動規的自底向上的求解方法,又看了幾篇博文,才初步了解了01揹包的真正的執行過程。必須推薦一下參考的文章,也記錄一下,以便日後進一步學習 不說了,上 0 1揹包問題 include using n...

hdu2546飯卡(動規 01揹包)

problem description 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功 即使購買後卡上餘額為負 否則無法購買 即使金額足夠 所以大家都希望盡量使卡上的餘額最少。某天,食堂中有n種菜 每種菜可購買一...

經典旅遊01揹包

題意描述 小陳要去 旅遊了,他開始收拾去旅遊要帶的東西,他選出n件物品,每件物品有一定的體積和價值,可惜小陳的包的容量只有m,因此小陳可能沒辦法把所有的東西都帶上,但是他想帶上價值盡量大的物品,當然前提是他的包裝得下。作為一名優秀的程式猿,小陳決定要打乙個程式來幫他選擇。你覺得他能做到嗎?第一行是樣...