今天初入門動態規劃,因此寫一點東西,希望初入門的人可以據此了解動態規劃。有不正確指出歡迎指出
首先說到,這個問題對動態規劃而言,是乙個什麼形態的問題。
不扯那麼多專業名詞,他不能直接用貪心,是因為,如果我這次選了2號物品,達成了當前最大價值。
那我也許會沒法選3號物品,,但是,可能,我不選2號,而選上3號,會有更好的價值。。
也就是說下一層的選擇,會因為上一層的選擇而發生變化,上一層的選擇,會因為下一層面臨的選擇而變的,不是最優
因此動態規劃。
對於這個問題,我們是把這些物品做好編號工作。,從1到n。
要求的是,對於這n個物品,我如何放置,會產生在容量內的最大值。
如果建構函式,c(i,m)表示,選取了
從1,2..直到 i 的這些物品,並且在m的容量範圍內,產生的最大價值的數值
首先假設,我真的算出了這個數值,假設此正確,按照數學歸納法的那個思想,我只需要能從 比如 c( i-1,m )(未必是i-1,m,也可以是別的,總之能遞推上來就行)
推到c(i,m)的數值,再加上,對一些無需多考慮的情況的初始化,我就能得到這個函式的所有數值。
因此 c(i,m) = max 。
對於第i個物品,他或者放(
如果放得下的話
),或者不放,因此得出上面的式子
從01揹包問題理解動態規劃
01揹包問題具體例子 假設現有容量10kg的揹包,另外有3個物品,分別為a1,a2,a3。物品a1重量為3kg,價值為4 物品a2重量為4kg,價值為5 物品a3重量為5kg,價值為6。將哪些物品放入揹包可使得揹包中的總價值最大?這個問題有兩種解法,動態規劃和貪婪演算法。本文僅涉及動態規劃。先不套用...
從01揹包問題理解動態規劃
01揹包問題具體例子 假設現有容量10kg的揹包,另外有3個物品,分別為a1,a2,a3。物品a1重量為3kg,價值為4 物品a2重量為4kg,價值為5 物品a3重量為5kg,價值為6。將哪些物品放入揹包可使得揹包中的總價值最大?動態規劃的思路 先將原始問題一般化,欲求揹包能夠獲得的總價值,即欲求前...
動態規劃 01揹包
最優二叉查詢樹.cpp 定義控制台應用程式的入口點。01揹包問題。include stdafx.h include include define n 3 the number of real node define m 10 using namespace std int tmain int arg...