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

分组背包

时间:2024-07-17 23:08:48浏览次数:6  
标签:10 背包 leq 分组 物品 价值 dp

先给出题目吧

通天之分组背包

题目背景

直达通天路·小 A 历险记第二篇

题目描述

自 \(01\) 背包问世之后,小 A 对此深感兴趣。一天,小 A 去远游,却发现他的背包不同于 \(01\) 背包,他的物品大致可分为 \(k\) 组,每组中的物品相互冲突,现在,他想知道最大的利用价值是多少。

输入格式

两个数 \(m,n\),表示一共有 \(n\) 件物品,总重量为 \(m\)。

接下来 \(n\) 行,每行 \(3\) 个数 \(a_i,b_i,c_i\),表示物品的重量,利用价值,所属组数。

输出格式

一个数,最大的利用价值。

样例 #1

样例输入 #1

45 3
10 10 1
10 5 1
50 400 2

样例输出 #1

10

提示

\(0 \leq m \leq 1000\),\(1 \leq n \leq 1000\),\(1\leq k\leq 100\),\(a_i, b_i, c_i\) 在 int 范围内。


这是多重背包的模板题
大意是:给你一个n组物品,每组选一个物品,放入背包,最大化价值并输出


首先最基本的输入数据
我们定义sum[i]表示第i组物品的数量,v[i][j]即第i组物品第j个物品的重量,w同理为价值
其次关于状态的思考

dp如何定义

我们定义dp[i][j]表示前i组物品,背包容量为j时的最大价值
根据0/1背包,我们很容易发现两者dp一样的
同理外层循环亦是一样的
for(int i=1;i<=n;i++) for(int j=0;j<=m;j++)
接下来我们考虑第三层
第三层应该是物品的循环
for(int k=1;k<=sum[i];k++)

如何进行状态转移

对于dp[i][j]我们发现,这个物品要么选要么不选,和0/1背包一样
但只能选一个
dp[i][j] = max(dp[i][j],dp[i-1][j-v[i][k]]+w[i][k]);
这是状态转移方程

解释该方程

首先dp[i][j]为不取的情况。
i不用-1是因为dp[i][j]同样是一组内其他物品所计算的最大价值(公用的),不选就是把这个dp给其他物品的最大价值。
后面那个就不用解释了吧!

标签:10,背包,leq,分组,物品,价值,dp
From: https://www.cnblogs.com/PanGZ-cabin/p/18308484

相关文章

  • 网络安全实验一 分组密码实验(AES加解密)
    本实验代码附在文末实验目的与要求:理解对称密码体制和分组密码算法的基本思想理解分组密码AES的基本原理实现AES的加解密过程,可以对各种文件(word、txt、mp3、jpg)进行加解密实现分组密码的密码分组链接工作模式与计算器工作模式实验环境:MicrosoftVisualStudio2022等......
  • sql server group by 分组跟着查询出对应的详细信息
    selectPickOrgId,zzjgfnumber,zzjgfname--部门编码部门名称仓库id仓库编码仓库名称,bmfnumber,bmfname,ckid,ckfnumber,ckname--物料id物料编码物料名称单位id单位编码......
  • DP-背包问题-0/1背包
    第一次写blog,不好见谅!今天主要记录在学习背包时的感想以及个人理解。0/1背包疯狂的采药题目背景此题为纪念LiYuxiang而生。题目描述LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一......
  • 动态规划+0-1背包问题
    一、问题描述小明周末要参加学校组织的跳蚤市场活动,他准备了足球、旱冰鞋、随身听和单词书四件物品进行交易,要用他的书包把这些物品带到学校。各物品的重量w和价值v如下图所示,小明书包的最大承重量为9(忽略单位),请你帮助他找到最合理的搭配方案,使他能用书包带到学校的物品价值最......
  • 如何将Navicat MySQL 数据库表分组复用或分享给其他人?
    一般大家做软件项目中,数据库的表是非常多的!几百张表一眼望去密密麻麻!一点看的欲望都没有了!于是乎,NavicatMySQL新增了一项功能:表分组,这样我们只需要将每个业务模块的表放到一个分组中!如图是不是就非常清晰了!应该有不少童鞋都已经这样使用了! 于是乎,新的烦恼来了,这个分组只......
  • 数据融合工具(6)线要素网络连通性分组计算
            出行,一直在使用导航辅助我们从起点奔赴终点,或许我们会有过这样的思考?导航路线规划是怎么实现的?        ……        我们先掰扯掰扯……一、导航路线规划是如何实现的?        导航路线规划是一种复杂的算法和技术,它用于确定......
  • 动态规划中01背包问题
    动态规划中01背包问题:这记录一下自己的思考和总结:详细讲解:添加链接描述这种题目中有两种解题方法一是二维数组dp[i][j]表示0-i区间背包容量为j的最大价值那么可以有两个方向推出来dp[i][j],不放物品i:由dp[i-1][j]推出,即背包容量为j,里面不放物品i的最大价值,此时dp[i][......
  • 算法学习笔记(8.3)-(0-1背包问题)
    目录最常见的0-1背包问题:第一步:思考每轮的决策,定义状态,从而得到dp表第二步:找出最优子结构,进而推导出状态转移方程第三步:确定边界条件和状态转移顺序方法一:暴力搜素代码示例:方法二:记忆化搜索时间复杂度取决于子问题数量,也就是O(n*cap)。实现代码如下:方法三:动态规划代......
  • 【Oracle】SQL 将一组已经排序的数据进行分组,按照每组50行进行分组
    【Oracle】SQL将一组已经排序的数据进行分组,按照每组50行进行分组简单来说,使用ceil函数SELECTyour_column,--ROW_NUMBER()OVER(ORDERBYyour_column)为排序的开窗函数,用那种都可以CEIL(ROW_NUMBER()OVER(ORDERBYyour_column)/51)ASgroup_numberFR......
  • C# Winform之propertyGrid控件分组后排序功能
    在WinForms的PropertyGrid控件中,你可以通过多种方式对属性进行排序,包括按类别(Category)排序以及按属性名称排序。默认情况下,PropertyGrid控件会根据[Category]和[DisplayName]属性装饰器对属性进行分组和排序。如果你想要自定义排序规则,你可以通过以下几种方法:使用......