Lintcode92 Backpack solution 題解

【題目描述】


Givennitems with size Ai, an integermdenotes the size of a backpack. How full you can fill this backpack?

在n個物品中挑選若干物品裝入揹包,最多能裝多滿?假設揹包的大小爲m,每個物品的大小爲A[i]

【注】:你不可以將物品進行切割。

【題目鏈接】

www.lintcode.com/en/problem/backpack/

【題目解析】

本題是典型的01揹包問題,每種類型的物品最多隻能選擇一件。

1.狀態: result[i][S] 表示前i個物品,取出一些物品能否組成體積和爲S的揹包

2.狀態轉移方程: f[i][S]=f[i1][SA[i]] or f[i1][S] (A[i]爲第i個物品的大小)

1.欲從前i個物品中取出一些組成體積和爲S的揹包,可從兩個狀態轉換得到。

i.f[i1][SA[i]]:放入第i個物品,前i1 個物品能否取出一些體積和爲 SA[i] 的揹包。

ii.f[i1][S]:不放入第i個物品,前i1 個物品能否取出一些組成體積和爲S的揹包。

3.狀態初始化: f[1…n][0]=true; f[0][1…m]=false. 前1~n個物品組成體積和爲0的揹包始終爲真,其他情況爲假。

4.返回結果: 尋找使 f[n][S] 值爲true的最大S (1≤S≤m)

【參考答案】

www.jiuzhang.com/solutions/backpack/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章