此處的最優方案是指物品總價值最大的方案。這裡以0-1揹包問題為例。給定資料如下:
c =[2
,3,4
,5,6
,7,8
];v =[3,
4,5,
6,7,
8,9]
;v =
23;
結合求最大總價值和方案總數兩個問題的思路,最優方案的總數可採取如下方式求解:令 dp[
i][j
]dp[i][j]
dp[i][
j]表示前i件物品在代價為j時的最大價值,key
[i][
j]
key[i][j]
key[i]
[j] 表示這個子問題的最優方案的總數。那麼可以在求解 dp[
i][j
]dp[i][j]
dp[i][
j]的同時求 key
[i][
j]
key[i][j]
key[i]
[j]。分為以下幾種情況:
public
intknapsackproblem
(int
c,int[
] v,
int v)
for(
int i =
1; i <= c.length; i++
)else
if(dp[i]
[j]== dp[i -1]
[j - c[i -1]
]+ v[i -1]
)}}}
system.out.
println
("最優方案總數: "
+ key[c.length]
[v])
;return dp[c.length]
[v];
}
揹包問題 「01揹包」最優方案總數分析及實現
edit by zhusenlin hdu 本人博文 揹包問題 01揹包 詳解及實現 包含揹包中具體物品的求解 中已談過01揹包,這裡再重寫一下01揹包的動態規劃狀態及狀態方程 設揹包容量為v,一共n件物品,每件物品體積為c i 每件物品的價值為w i 1 子問題定義 f i j 表示前i件物品中選...
「01揹包」最優方案總數分析及實現
本文為網上覆制 本人博文 揹包問題 01揹包 詳解及實現 包含揹包中具體物品的求解 中已談過01揹包,這裡再重寫一下01揹包的動態規劃狀態及狀態方程 設揹包容量為v,一共n件物品,每件物品體積為c i 每件物品的價值為w i 1 子問題定義 f i j 表示前i件物品中選取若干件物品放入剩餘空間為j...
完全揹包求方案總數
給定乙個正整數n,求將其分解成若干個素數之和的方案總數。這題和p1164 小a點菜很像,但是那題是01揹包,這題是完全揹包。include include include include include define int long long using namespace std const i...