【題目描述】
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[i?1][S?A[i]] or f[i?1][S] (A[i]為第i個物品的大小)
1.欲從前i個物品中取出一些組成體積和為S的背包,可從兩個狀態轉換得到。
i.f[i?1][S?A[i]]:放入第i個物品,前i?1 個物品能否取出一些體積和為 S?A[i] 的背包。
ii.f[i?1][S]:不放入第i個物品,前i?1 個物品能否取出一些組成體積和為S的背包。
3.狀態初始化: f[1?n][0]=true; f[0][1?m]=false. 前1~n個物品組成體積和為0的背包始終為真,其他情況為假。
4.返回結果: 尋找使 f[n][S] 值為true的最大S (1≤S≤m)
【參考答案】