动态规划之背包问题

作者: spraysss | 来源:发表于2020-01-25 17:14 被阅读0次

0-1背包

有一个容量为 C的背包,和一些物品。这些物品分别有两个属性,体积 w 和价值 v,每种物品最多只能装一个。要求用这个背包装下价值尽可能多的物品

定义w[i-1],v[i-1]分别 第i个物品的重量和价值,dp[i][j]为容量为j的背包装第i件物品的最大价值,可以得出如下递推公式:

  • dp[0][j]dp[i][0]=0
  • w[i-1]>j时,dp[i][j]=dp[i-1][j],(当装第i个物品时,物品的重量大于背包重量j)
  • w[i]<=j时,dp[i][j]=max(dp[i-1][j], v[i-1]+dp[i-1][j-w[i-1]])

java代码

package com.ds.dp;

public class Knapsack {
    /**
     * 
     * @param C 背包的容量
     * @param v 物品的价格表
     * @param w 物品的重量表
     * @return
     */
    public static int knapsack01(int C, int[] v, int[] w) {
        int dp[][] = new int[v.length + 1][C + 1];
        for (int i = 1; i <= v.length; i++) {
            for (int j = 1; j <= C; j++) {

                if (w[i - 1] > j) {
                    dp[i][j] = dp[i - 1][j];
                } else {
                    dp[i][j] = Math.max(dp[i - 1][j], v[i - 1] + dp[i - 1][j - w[i - 1]]);
                }

            }
        }
        return dp[v.length][C];

    }

    public static void testKnapsack01() {
        int[] v = {15, 30, 25};
        int[] w = {1, 4, 3};
        System.out.println(knapsack01(4, v, w));
    }

    public static void main(String[] args) {
        testKnapsack01();
    }
}

代码地址

https://github.com/spraysss/data-structure/blob/master/src/main/java/com/ds/dp/Knapsack.java

相关文章

  • 算法学习收藏

    动态规划问题 动态规划(最优子结构和重叠子问题的比较) 动态规划解决01背包问题 01背包问题 最优二叉查找树 《...

  • 动态规划之背包问题

    题目来源于背包九讲以及https://www.bilibili.com/video/av33930433?p=2以...

  • 动态规划之背包问题

    1. 动态规划(Dynamic Programming, DP)问题 1.1 基本思想 动态规划背后的基本思想非常...

  • 动态规划之背包问题

    0-1背包 有一个容量为 C的背包,和一些物品。这些物品分别有两个属性,体积 w 和价值 v,每种物品最多只能装一...

  • 算法思想之动态规划(七)——背包问题

    前言 今天我们继续讨论经典的动态规划问题之背包问题。 背包问题 问题描述 一个背包有一定的承重capacity,有...

  • 初识动态规划

    0-1 背包问题 备忘录 动态规划-二维数组 动态规划-一维数组 0-1 背包问题升级版 回溯算法 动态规划-二维...

  • 2019-07-10 数据结构和算法(妙味杜鹏)

    八皇后 A *寻路 背包问题(动态规划方法) 背包问题(贪心算法)

  • 背包系列问题4——二维背包

    参考资料:1. 动态规划之背包问题系列2. #### 一和零

  • 动态规划

    0-1背包问题 自己实现的0-1背包问题的动态规划解法,先贴上吧,动态规划原理解释有空再写。

  • 动态规划.背包问题

    动态规划 之 0-1背包问题 【背包问题】 现有n个物品,价值为`$$v_1,v_2....v_n$$ 重量为 现...

网友评论

    本文标题:动态规划之背包问题

    本文链接:https://www.haomeiwen.com/subject/soyrthtx.html