博客
关于我
AcWing 9. 分组背包问题(动态规划dp)
阅读量:351 次
发布时间:2019-03-04

本文共 1916 字,大约阅读时间需要 6 分钟。

为了解决这个问题,我们需要找到一种方法来选择背包中的物品,使得总体积不超过背包容量,并且总价值最大。这个问题类似于0-1背包问题,但每个物品来自不同的组,每组只能选择一个物品。

方法思路

  • 问题分析:每个组中的物品只能选择一个,因此我们可以将每个物品看作一个独立的物品进行处理。
  • 动态规划:使用动态规划来解决这个问题。我们创建一个数组 dp,其中 dp[j] 表示容量为 j 时的最大价值。
  • 排序物品:为了优化处理,先将物品按体积从小到大排序,这样可以更高效地更新动态规划数组。
  • 处理每个物品:对于每个物品,检查其体积是否超过背包容量,如果不超过,则更新动态规划数组。
  • 解决代码

    import java.io.*;import java.util.*;class Main {    static int[] dp = new int[1001];    static int n = 0, m = 0;    static List
    items = new ArrayList<>(); public static void main(String[] args) throws Exception { BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); String[] params = buf.readLine().split(" "); n = Integer.parseInt(params[0]); m = Integer.parseInt(params[1]); for (int i = 1; i <= n; ++i) { int cnt = Integer.valueOf(buf.readLine()); for (int j = 1; j <= cnt; ++j) { String[] info = buf.readLine().split(" "); int a = Integer.valueOf(info[0]); int b = Integer.valueOf(info[1]); items.add(new int[]{a, b}); } } // 排序物品,按体积升序 Collections.sort(items, new Comparator
    () { public int compare(int[] a, int[] b) { return Integer.compare(a[0], b[0]); } }); // 初始化动态规划数组 Arrays.fill(dp, 0); for (int[] item : items) { int v = item[0]; int w = item[1]; if (v > m) continue; for (int j = m; j >= v; --j) { if (dp[j - v] + w > dp[j]) { dp[j] = dp[j - v] + w; } } } System.out.println(dp[m]); }}

    代码解释

  • 读取输入:首先读取背包容量 V 和物品组数 N,然后读取每个组的物品数据。
  • 排序物品:将所有物品按体积从小到大排序,以优化动态规划的处理。
  • 初始化动态规划数组dp 数组初始化为全0,表示初始时背包为空。
  • 处理每个物品:对于每个物品,检查其体积是否超过背包容量,如果不超过,则从后向前更新 dp 数组,确保每个物品只被选一次。
  • 输出结果:最后输出背包容量为 V 时的最大价值。
  • 这种方法确保了每个物品只被处理一次,并且通过动态规划高效地更新背包状态,能够在合理时间内解决问题。

    转载地址:http://zyre.baihongyu.com/

    你可能感兴趣的文章
    npm报错File to import not found or unreadable: @/assets/styles/global.scss.
    查看>>
    npm报错unable to access ‘https://github.com/sohee-lee7/Squire.git/‘
    查看>>
    npm淘宝镜像过期npm ERR! request to https://registry.npm.taobao.org/vuex failed, reason: certificate has ex
    查看>>
    npm版本过高问题
    查看>>
    npm的“--force“和“--legacy-peer-deps“参数
    查看>>
    npm的安装和更新---npm工作笔记002
    查看>>
    npm的常用配置项---npm工作笔记004
    查看>>
    npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
    查看>>
    npm编译报错You may need an additional loader to handle the result of these loaders
    查看>>
    npm设置淘宝镜像、升级等
    查看>>
    npm设置源地址,npm官方地址
    查看>>
    npm设置镜像如淘宝:http://npm.taobao.org/
    查看>>
    npm配置安装最新淘宝镜像,旧镜像会errror
    查看>>
    NPM酷库052:sax,按流解析XML
    查看>>
    npm错误 gyp错误 vs版本不对 msvs_version不兼容
    查看>>
    npm错误Error: Cannot find module ‘postcss-loader‘
    查看>>
    npm,yarn,cnpm 的区别
    查看>>
    NPOI
    查看>>
    NPOI之Excel——合并单元格、设置样式、输入公式
    查看>>
    NPOI初级教程
    查看>>