美文网首页
背包问题

背包问题

作者: Wilbur_ | 来源:发表于2021-04-13 10:41 被阅读0次

背包问题

背包问题主要是要求一个在有限范围内(你背包的体积范围内) 能够拿到最大值的问题。
最主要要想明白状态是由两个集合构成的就是两种状态,选第i个物品和不选。知道了整个到第i个物品时候你能够选到的最大值是由这两个状态组成的集合就可以了。

状态计算或者状态转移

状态计算/状态转移的方程实际上就是如何从之前的步骤计算到当前的步骤。这种背包问题就需要想到不拿当前物品,也就是dp[i-1][j] 和拿当前物品dp[i][j]。
dp[i][j] 是由前一个dp[i-1[j]转化而来的,这时候你需要判断一下当前j(也就是背包的容量是否够大,j>=v[i] 就代表当前的背包容量比当前物品的体积大,能够放得下,一开始这点我没想到。因为j是从0开始计算的,也就是说实际上他是从背包是满的状态开始计算的。一步步到最后背包最大时候的状态(是我的反向思维)这么做好像可以直接保证你在第二个for loop的时候里面dp[i][j-v[i]] 这个状态是计算过的,因为他会从大到小的放满背包。

import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] s1 = br.readLine().split(" ");
        int N = Integer.parseInt(s1[0]), V = Integer.parseInt(s1[1]);
        int[] v = new int[N+1], w = new int[N+1];
        for (int i = 1; i <= N; i++) {
            s1 = br.readLine().split(" ");
            v[i] = Integer.parseInt(s1[0]);
            w[i] = Integer.parseInt(s1[1]);
        }
        int[][] dp = new int[N+1][V+1];
        for (int i = 1; i <= N; i++) {
            for (int j = 0; j <= V; j++) {
                dp[i][j] = dp[i-1][j];
                if (j >= v[i]) dp[i][j] = Math.max(dp[i][j], dp[i-1][j-v[i]] + w[i]);
            }
        }
        System.out.println(dp[N][V]);
    }
}

相关文章

  • 背包问题(完全背包)

    动态规划合集: 1.矩阵链乘法2.投资组合问题3.完全背包问题4.01背包问题5.最长公共子序列 例题3——背包问...

  • Algorithm进阶计划 -- 动态规划(下)

    经典动态规划背包问题最长子序列问题 1. 背包问题 1.1 0-1 背包问题 0-1 背包问题,描述如下: 上面...

  • 背包问题

    0-1背包问题 问题 n个物体,它们各自有重量和价值,给定一个有容量的背包,如何让背包里装入的物体价值总和最大? ...

  • 背包问题

    问题描述 假如有一个能装下4磅的背包,如何从下列商品列表中选择商品填充背包,使价值达到最大: 动态规划 要解决背包...

  • 背包问题

    (1)0-1背包容量为10的背包,有5种物品,每种物品只有一个,其重量分别为5,4,3,2,1,其价值分别为1,2...

  • 背包问题

  • 背包问题

    01背包(物品只有一个) 有N件物品和一个容量为V的背包。第i建物品的费用是w[i],价值是v[i]。求解将哪些物...

  • 背包问题

    1. 01背包 状态说明:背包体积为v,物品个数为n,f[n,v]表示前n件物品加入背包的最大价值。c_i,w_i...

  • 背包问题

    01背包 优化空间复杂度,变为一维; 外循环依然是n从1->N, 注意内循环 v是从V->0,为什么内循环是V->...

  • 背包问题

    介绍 学习动态规划算法的经典例题。动态规划算法一般有3个特征1、最优化原理:最优解所包含的子问题的解也是最优的。2...

网友评论

      本文标题:背包问题

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