博客
关于我
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/

    你可能感兴趣的文章
    NVIDIA-cuda-cudnn下载地址
    查看>>
    nvidia-htop 使用教程
    查看>>
    nvidia-smi 参数详解
    查看>>
    Nvidia驱动失效,采用官方的方法重装更快
    查看>>
    nvmw安装node-v4.0.0之后版本的临时解决办法
    查看>>
    nvm切换node版本
    查看>>
    nvm安装 出现 Error retrieving “http://xxxx/SHASUMS256.txt“: HTTP Status 404 解决方法
    查看>>
    nvm安装以后,node -v npm 等命令提示不是内部或外部命令 node多版本控制管理 node多版本随意切换
    查看>>
    ny540 奇怪的排序 简单题
    查看>>
    NYOJ 1066 CO-PRIME(数论)
    查看>>
    NYOJ 737:石子合并(一)(区间dp)
    查看>>
    nyoj 91 阶乘之和(贪心)
    查看>>
    nyoj------203三国志
    查看>>
    NYOJ-525 一道水题
    查看>>
    nyoj58 最少步数
    查看>>
    N皇后问题
    查看>>
    OAuth 2.0 MAC Tokens
    查看>>
    OAuth 及 移动端鉴权调研
    查看>>
    OAuth2 + Gateway统一认证一步步实现(公司项目能直接使用),密码模式&授权码模式
    查看>>
    OAuth2 Provider 项目常见问题解决方案
    查看>>