首页 > 其他分享 >背包之分组背包

背包之分组背包

时间:2024-08-21 20:39:12浏览次数:3  
标签:背包 vol 分组 物品 最优 dp

       分组背包是01背包的进阶问题,但是相对于较为简单,主要难在他的衍生问题。



       分组背包就是现有n个物品,将这些物品分成若干组,给你一个容量为v的背包,对于每一个组中的物品,你最多只能选择一个,问哪些物品装入背包可以使得在体积总和不超过容量v的情况下,价值总和最大。

       可以看出分组背包和01背包有一点细微的差别,01背包是每一种物品最多拿一个,分组背包则变成了每一组最多能拿一个物品。现在我们定义dp[i][j]为前i组物品恰好放入容量为j的背包中的最优选择,dp[i][j]可以由前i - 1组的最优解加上这一组不取物品得到,也可以通过前i - 1个组容量为j - vol[i][k]的最优解再放入当前组的第k个物品得到,依次枚举k的大小,把这一组的所有物品全部遍历完毕,即可得到最终的dp[i][j],所以可以得到递推公式:

dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - vol[i][k]] + val[i][k])

       其中vol[i][k]表示第i个组别中第k个元素的体积,val[i][k]表示第i个组别中第k个元素的价值。要得到当前的最优解,需要求出前i - 1个组能达到的最优解,然后再在前i - 1个组的基础上加入这一组的元素,对数组元素进行更新。

标签:背包,vol,分组,物品,最优,dp
From: https://www.cnblogs.com/againss/p/18372459

相关文章

  • 面试+算法之动态规划(Java):斐波那契、背包问题、走棋盘、分苹果、连续子数组最大和、
    概述Dynamicprogramming,简称DP,动态规划,基础算法之一,维基百科的解释:是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时......
  • leetcode322. 零钱兑换,完全背包最值问题,附背包问题模板
    leetcode322.零钱兑换给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。示例1:输入:coins=[1,2,5......
  • C#基础:数据库中使用Linq作分组处理(反射/直接分组)
    目录一、使用反射分组二、不使用反射分组三、调用示例四、代码demo一、使用反射分组privatestaticList<GroupList<T>>GetGroupList<T>(List<T>entities,stringgroupByProperty){//获取分组字段的类型varpropertyInfo=typeof(T).GetProperty(groupBy......
  • leetcode 49.字母异位词分组
    leetcode49.字母异位词分组题干给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词是由重新排列源单词的所有字母得到的一个新单词。示例1:输入:strs=["eat","tea","tan","ate","nat","bat"]输出:[["bat"],["nat",&......
  • MySQL 查询分组内最新的第一条数据
    目录1、MySQL5版本的写法2、MySQL8版本的写法由于MySQL5不支持窗口函数,因此不能使用PARTITION()、ROW_NUMBER()......
  • PbootCMS依次输出指定分组的幻灯片图片
    适用范围:全站任意地方均可使用标签作用:用于依次输出指定分组的幻灯片图片1、幻灯片轮播图列表{pboot:slidegid=*num=*}<imgsrc="[slide:src]">{/pboot:slide}控制参数:gid=*分组,必填,用于控制需要输出的幻灯片分组num=*数量,非必填,用于控制需要输出的数量,默认为5个2、可......
  • PbootCMS依次输出指定分组的友情链接
    适用范围:全站任意地方均可使用标签作用:用于依次输出指定分组的友情链接1、友情链接列表{pboot:linkgid=*num=*}<ahref="[link:link]"title="[link:name]"><imgsrc="[link:logo]"></a>{/pboot:link}控制参数:gid=*分组,必填,用于控制需要输出的友情链接分组num=*数量......
  • 01背包问题
    有 NN 件物品和一个容量是 VV 的背包。每件物品只能使用一次。第 ii 件物品的体积是 vivi,价值是 wiwi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,VN,V,用空格隔开,分别表示物品数量和背包容积......
  • 【现代通信技术】第五章 分组交换技术
    一、分组交换的基本原理   下面,我们将介绍一下分组的传输方式、分组经过路由器为何会产生时延、路由协议的基本概念。    在通信源端有需要传输的数据时,可以将信息分成若干个分组,并且在分组的首部填写好相应的控制字段。然后将分组送入网络进行传输,分组经过网......
  • Codeforces 232 B Table 题解 [ 蓝 ] [ 分组背包 ] [ 组合数学 ] [ 循环节 ]
    Codeforces232BTable。蒟蒻模拟赛上场切的一道蓝,非常难以置信我竟然能做蓝题。这题的数据范围初看还是比较坑的,\(10^{18}\)的值域很容易让人往矩阵加速那方面想。实际上在列出转移方程式后,我们发现状态是二维的,无法使用矩阵加速(或者说这样做很麻烦)。思路首先观察到每个边长......