朴素算法
f[i][j]=max(f[i][j],f[i−1][j−k∗v[i]]+k∗w[i])与01背包类似
for (int i = 1;i <= n;++i) {
    for (int j = 0;j <= m;++j) {
        for (int k = 0;v[i] * k <= j;++k) {
            f[i][j] = max(f[i][j], f[i - 1][j - k * v[i]] + k * w[i]);
        }
    }
}优化做法
for (int i = 1;i <= n;++i) {
    for (int j = 0;j <= m;++j) {
        f[i][j] = f[i - 1][j];
        if(j >= v[i])f[i][j] = max(f[i][j],f[i][j -v[i]] + w[i]);
    }
}优化成一维
在计算f[j]时 因为j−v[i]小于j所以此时的f[j−v[i]]被更新到了第i 维 与原式相符 所以j不需要从大到小枚举
for (int i = 1;i <= n;++i) {
    for (int j = v[i];j <= m;++j) {
        f[j] = max(f[j],f[j -v[i]] + w[i]);
    }
}当优化到一维时,只有完全背包的体积是从小到大循环的
for 物品:
for 体积:
for 决策:
 
                    
 
                                         
                                                                                         
                                                                                         
                                                                                         
                                                                                         
                                                                                        