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[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)

【參考答案】

www.jiuzhang.com/solutions/backpack/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容