关键点:最后一个背包的内的物品是哪个,最后一个物品有没有进背包。
背包问题要将总承重放入状态。
可行性背包,计数型背包,最值型背包。
92. Backpack
在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i]
提示: 两种思路,第一种状态是f[i][w]表示能否用前i个物品拼出重量w。优化空间的的话,可以不在f中记录i,然后从后向前遍历 输出第一个为true的w的值。
第二种思路是直接记录重量。
答案:
第一种
class Solution {
public:
/**
* @param m: An integer m denotes the size of a backpack
* @param A: Given n items with size A[i]
* @return: The maximum size
*/
int backPack(int m, vector<int> A) {
int n = A.size();
vector<vector<bool>> f(n + 1, vector<bool>(m + 1, false));
f[0][0] = true;
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= m; j++) {
f[i][j] = f[i - 1][j];
if (j >= A[i-1] && f[i-1][j - A[i-1]]) {
f[i][j] = true;