【題目描述】
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/