动态规划真的懂了呀系列《背包DP:多重背包》

94 阅读1分钟

价值:记录学习过程的思考,本身就是一场动态规划的前生,记忆化搜索。

    void DuoChongBagDp_i_for_k_01bag() {
        int n = 10; // 物品种数
        int m = 100; // 背包容量
        int[] f = new int[m+1];
        for (int i = 0; i < n; i++) {
            // 这里简单模拟下,可以不一致
            int v = 3; // 价值
            int w = 2; // 重量/体积
            int s = 10; // 第i种物品,能够选的有效个
            //这不能用正序,正序的话选到后面你不知道选了多少个当前物品,只能从大到小,一次可以遍历完能放的物品总个数
            for (int j = m; j >= 0; j--) {
                for (int k = 1; k <= s && k * v >= j; k++) {
                    f[j] = Math.max(f[j], f[j - k * v] + w * v);
                }
            }
        }
        int ans = f[m];
    }