背包问题(第k优解问题)

news2024/11/26 0:56:19

这篇博客先说一道洛谷蓝题(实际难度其实可能也就是在橙题左右,难度不大,请放心食用)

1.背包问题的第k优解

首先,我们知道背包问题的最优解,我们可以通过状态转移方程来求出最优解

状态转移方程(滚动数组):dp [ j ]=max(dp [ j ],dp [ j - w [ i ] ] + v [ i ] );

但是如果我们要去求一个k优解,那么首先我们需要再多一维数组去来记录我们我们的第 k 优解

所以dp数组为 dp[ j ] [ k ],表示对于容量为 j 的背包,第 k 最优解为 dp[ j ] [ k ]

我们正常的最优解是通过两个状态转移而来,但是我们对于前k个解来说,我们相当于通过两个队列得出我们的前k个解,相当于合并队列的思想,我们这个队列是从大到小排的

我们的 dp [ j ] [ k ]可以来从两个队列中得到,一个是dp [ j ] [ k] 还有一个是 dp [ j -w[ i ] ] [ k]+v[ i ];

总的时间复杂度为O(N*V*K)

为什么这个方法正确呢?实际上,一个正确的状态转移方程的求解过程遍历了所有可用的策略,也就覆盖了问题的所有方案。只不过由于是求最优解,所以其它在任何一个策略上达不到最优的方案都被忽略了。如果把每个状态表示成一个大小为K的数组,并在这个数组中有序的保存该状态可取到的前K个最优值。那么,对于任两个状态的max运算等价于两个由大到小的有序队列的合并。

另外还要注意题目对于“第K优解”的定义,将策略不同但权值相同的两个方案是看作同一个解还是不同的解。如果是前者,则维护有序队列时要保证队列里的数没有重复的。

传送门——P1858 多人背包

56e9baff30be43239ff0092df93e6c12.png

就是我上面阐述内容的一个小例题,很简单,放心食用,我写了一部分注释,看不懂私信即可

//多人背包 
#include<bits/stdc++.h>
using namespace std;
int k,v1,n;
int w[205];//重量 
int v[205];//价值 
int dp[5005][55];
int t[55];//一个临时数组,两个队列找出的前k个最大的 
int main()
{
	cin>>k>>v1>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>w[i]>>v[i];
	}
	memset(dp,-0x3f3f3f3f,sizeof(dp));//因为要把背包装满的最大值,所以我们的非法状态要设为负的最大值 
	dp[0][1]=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=v1;j>=w[i];j--)
		{
			int c1=1,c2=1,cnt=0;//cnt记录更新的总数 ,c1是第一个队列的轮到那个,c2是第二个队列轮到哪个 
			while(cnt<=k)
			{
				if(dp[j][c1]>dp[j-w[i]][c2]+v[i])
				{
					cnt++;
					t[cnt]=dp[j][c1++];
				}
				else
				{
					cnt++;
					t[cnt]=dp[j-w[i]][c2++]+v[i];
				}
			}
			
			for(int z=1;z<=k;z++)
			dp[j][z]=t[z];
		}
	}
	int ans=0;
	for(int i=1;i<=k;i++)
	ans+=dp[v1][i];
	cout<<ans;
	return 0;
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1797232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创业项目TensorLink开源了,没有显卡也可以玩大模型、SD。

显卡是很贵的、也是稀缺的。但是AI又是很火的&#xff0c;每个人都不想错过这个机会&#xff0c;公司也一样。 假设你是公司或者团队的负责人&#xff0c; 为了拥抱AI&#xff0c;先要解决显卡算力问题。如果要给每个人都配置一个显卡&#xff0c;哪怕是消费卡&#xff0c;也是…

Git - 详解 创建一个新仓库 / 推送现有文件夹 / 推送现有的 Git 仓库 到私有Gitlab

文章目录 【推送现有文件夹】详细步骤指令说明Git 全局设置设置Git全局用户名设置Git全局电子邮件地址 推送现有文件夹1. 进入现有文件夹2. 初始化Git仓库并设置初始分支为main3. 添加远程仓库4. 添加所有文件到暂存区5. 提交更改6. 推送代码到远程仓库并设置上游分支 创建一个…

麦克风什么牌子的音质效果好?揭秘最好的无线麦克风品牌排行

最近几年可以说全民短视频也不为过&#xff0c;越来越多人开始通过用手机拍摄短视频、vlog记录自己的生活&#xff0c;而领夹式无线麦克风的需求也开始激增。毕竟一个好的视频除了要有巧妙的构思和清晰稳定的拍摄外&#xff0c;干净的声音也是必不可少的部分。 要知道短视频归根…

pytorch构建模型训练数据集

pytorch构建模型训练数据集 pytorch构建模型训练数据集1.AlexNet:1.1.导入必要的库&#xff1a;1.2.数据预处理和增强&#xff1a;1.3.加载数据集&#xff1a;1.4.划分测试集和训练集&#xff1a;1.5.创建数据加载器&#xff1a;1.6.加载AlexNet模型&#xff1a;1.7.修改模型以…

【Python报错】已解决AttributeError: list object has no attribute ’shape‘ ( Solved )

解决Python报错&#xff1a;AttributeError: ‘list’ object has no attribute ‘shape’ (Solved) 在Python中&#xff0c;AttributeError表明你试图访问的对象没有你请求的属性或方法。如果你遇到了AttributeError: list object has no attribute shape的错误&#xff0c;这…

OpenMV学习笔记3——画图函数汇总

画图&#xff0c;即在摄像头对应位置画出图形&#xff0c;对于需要反馈信息的程序来说很直观。就如上一篇文章颜色识别当中的例子一样&#xff0c;我们在识别出的色块上画出矩形方框&#xff0c;并在中间标出十字&#xff0c;可以直观的看到OpenMV现在识别出的色块。 目录 一…

【机器学习】Python与深度学习的完美结合——深度学习在医学影像诊断中的惊人表现

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、深度学习在医学影像诊断中的突破1. 技术原理2. 实际应用3. 性能表现 三、深度学习在医学影像诊断中的惊人表现1. 提高疾病诊断准确率2. 辅助制定治疗方案 四、深度学习对医疗行业的影响和推动作用 一、引言 随着…

冯喜运:6.7今日外汇黄金原油走势分析及日内操作策略

【黄金消息面分析】&#xff1a;美国初请失业金人数超预期&#xff0c;市场对美联储9月降息预期升温&#xff0c;全球降息潮起&#xff0c;黄金市场受支撑。北京时间本周四&#xff0c;美国劳工部公布的数据显示&#xff0c;截至6月1日当周初请失业金人数增加至22.9万人&#x…

【ArcGIS微课1000例】0119:TIFF与grid格式互相转换

文章目录 一、任务描述二、tiff转grid三、grid转tif四、注意事项一、任务描述 地理栅格数据常用TIFF格式和GRID格式进行存储。TIFF格式的栅格数据常以单文件形式存储,不仅存储有R、G、B三波段的像素值,还保存有地理坐标信息。GRID格式的栅格数据常以多文件的形式进行存储,且…

网络原理——HTTP/HTTPS ---- HTTPS

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 目录 HTTPS加密与解密HTTPS的工作流程使用对称密钥来加密使用非对称密钥 来对 对称密钥进行加密第三方公证总结 HTTPS https本质上就是在http的基础之上 增加了加密层,抛开加密层之后,剩下的部…

【Python】实现极致:克服PyInstaller打包挑战,解决libpython3.10.so.1.0库丢失难题

【Python】实现极致&#xff1a;克服PyInstaller打包挑战&#xff0c;解决libpython3.10.so.1.0库丢失难题 大家好 我是寸铁&#x1f44a; 总结了一篇【Python】实现极致&#xff1a;克服PyInstaller打包挑战&#xff0c;解决libpython3.10.so.1.0库丢失难题✨ 喜欢的小伙伴可以…

Git的概念

Git 一些概念 **工作区&#xff1a;**电脑上你能看到的目录 **版本库&#xff1a;**工作区的隐藏目录.git。含 暂存区&#xff1a;git add后但未git commit的文件修改被添加到暂存区本地分支&#xff1a;git commit后&#xff0c;但未git push&#xff0c;即把暂存区的所有…

【云原生】kubernetes中secret原理详解与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

51单片机-实机演示(LED点阵)

目录 前言: 一.线位置 二.扩展 三.总结 前言: 这是一篇关于51单片机实机LED点阵的插线图和代码说明.另外还有一篇我写的仿真的连接在这:http://t.csdnimg.cn/ZNLCl,欢迎大家的点赞,评论,关注. 一.线位置 接线实机图. 引脚位置注意: 1. *-* P00->RE8 P01->RE7 …

JavaWeb2-Vue

Vue 前端框架&#xff0c;免除原生JS中的DOM操作简化书写 &#xff08;以前学过又忘了&#xff0c;现在才知道原来vue是前端的&#xff09; 基于MVVM思想&#xff08;model-view -viewModel&#xff09;实现数据双向绑定 model是数据模型 view负责数据展示 即DOM 中间这个负责…

EitbaseEX香港启航,携手OpenAI和路透社开发AI分析技术

全球知名的加密货币交易平台EitbaseEX宣布正式入驻香港&#xff0c;并改名为EitbaseEX。这一举措标志着EitbaseEX在亚洲市场的重要布局&#xff0c;旨在为香港及周边地区的用户提供安全、合规且高效的数字货币交易服务。与此同时&#xff0c;EitbaseEX还宣布与OpenAI和路透社展…

怎么找抖音视频素材?下载抖音的素材视频网站分享给你

在这个视觉印象至关重要的时代&#xff0c;选用高质量的视频素材对于制作抖音视频来说是关键。如果你正在寻找适合的视频素材来丰富你的抖音创作&#xff0c;以下这份详细的视频素材网站指南将帮助你迈出第一步。 蛙学府网 蛙学府网提供了丰富多样的视频素材&#xff0c;包括动…

如何新建并导入数据集并智能标注

如何新建并导入数据集并智能标注 智能标注 提交等待即可&#xff0c;智能标注结束会有难例确认&#xff0c;这个可以检查一下&#xff0c;检查完毕就自动保存标注就可以了

搭贝请假审批应用

在现代企业管理中&#xff0c;高效的请假审批系统至关重要。搭贝的请假审批应用通过简化员工的请假流程、提升管理层的工作效率&#xff0c;确保企业运作的连贯性和透明度。本文将介绍搭贝请假审批应用的主要功能模块&#xff1a;请假分析看板、请假申请审批流、请假类型维护和…

什么是振动电阻式传感器测量模块RM501/502

什么是振动电阻式传感器测量模块RM501/502 基本概念 差动电阻式传感器&#xff1a; &#xff08; Elastic wire sensor&#xff09;是以两个电阻的比值来反映被测物理量的传感器。由于是由卡尔逊教授在 1932 年研发成功&#xff0c;所以也称为卡尔逊式传感器。 因为采用的是两…