回溯法解决01背包问题

news2024/11/25 9:52:34

输入(共n+1行):物品数量、背包体积

下面n行依次输入物品价值和体积

需要注意的点:

①输入的顺序

②存储价值和体积的数组下标从1开始

③每一轮符合条件时,及时更新VALUE(价值总和)

从前面做的回溯法可以总结出一些回溯法做题的思路,虽然回溯法在实际运用中很少运用,但是它可以帮我们理解递归的执行过程。

回溯法做题思路:

①确定问题:求最优解/求符合条件的所有解

②开辟数组:

如果问题是求最优解,那么一般需要有两个数组A和B,一个数组A供递归时暂时存放数据,另一个数组B用来存储答案,在满足条件时更新B

如果问题时求符合条件的所有解,那么回溯的过程只需要一个暂时存放数据的数组就可以了,当满足条件时输出数组里面的数据(因为问题的解可能有多个,我们只需要输出不需要保存)

在执行完递归之后,要及时“恢复现场”,保证下一轮递归不受影响

#include<iostream>
using namespace std;
const int N=100;
int v[N],s[N];
int t[N],ans[N];
int VALUE=-INT_MAX,SIZE=0,MAXSIZE=0;
int n;
/*
5 12
1 1
2 3
3 2
4 5
6 5
*/
/*
4 5
2 1
4 2
4 3
5 4
*/
void solve(int k)//k表示物品 
{
	for(int i=0;i<=1;i++)//i表示选或者不选,1选0不选
	{
		t[k]=i;
		
		int tvalue=0,tsize=0;
		for(int j=1;j<=n;j++)
		{
			tvalue+=t[j]*v[j];
			tsize+=t[j]*s[j];
		}
			
		if(k!=n)
		{
			solve(k+1);
			t[k]=0;
		}	
		else if(k==n&&tvalue>VALUE&&tsize<=MAXSIZE)
		{	
		
				VALUE=tvalue;//至关重要,更新最大价值总和 
				
				for(int j=1;j<=n;j++)
					ans[j]=t[j];
					
//				printf("价值总和tvalue=%d,体积总和tsize=%d\n",tvalue,tsize);
//				for(int j=1;j<=n;j++)
//				{
//					if(t[j]==0)
//						printf("物品%d不选\n",j);
//					else if(t[j])
//						printf("选择物品%d,该物品价值为:%d,体积为:%d\n",j,v[j],s[j]);
//				}
//			}
			//恢复现场 
			t[k]=0;
		}
	} 
}
int main()
{
	cin>>n>>MAXSIZE;
	
	for(int i=1;i<=n;i++)//下标从1开始 
		scanf("%d%d",&v[i],&s[i]);//注意,先输入价值再输入体积 
		
	solve(1);
	
	int tvalue=0,tsize=0;
	
	for(int j=1;j<=n;j++)
	{
		tvalue+=ans[j]*v[j];
		tsize+=ans[j]*s[j];
	}
	printf("--------最终选择策略--------\n");
	printf("价值总和tvalue=%d,体积总和tsize=%d\n",tvalue,tsize);
	for(int j=1;j<=n;j++)
	{
		if(ans[j]==0)
			printf("物品%d不选\n",j);
		else if(ans[j])
			printf("选择物品%d,该物品价值为:%d,体积为:%d\n",j,v[j],s[j]);
	}
	
	return 0;
} 

运行结果:

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

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

相关文章

bootstrap5开发房地产代理公司Hamilton前端页面

一、需求分析 房地产代理网站是指专门为房地产行业提供服务的在线平台。这些网站的主要功能是连接房地产中介机构、房产开发商和潜在的买家或租户&#xff0c;以促成买卖或租赁房产的交易。以下是一些常见的房地产代理网站的功能&#xff1a; 房源发布&#xff1a;房地产代理网…

009、引用

1. 引用与借用 下面的示例重新定义了一个新的 calculate_length 函数。与之前不同的是&#xff0c;新的函数签名使用了 String 的引用作为参数而没有直接转移值的所有权&#xff1a; fn main() { let s1 String::from("hello"); let len calculate_length(&s1…

病情聊天机器人,利用Neo4j图数据库和Elasticsearch全文搜索引擎相结合

项目设计目的&#xff1a; 本项目旨在开发一个病情聊天机器人&#xff0c;利用Neo4j图数据库和Elasticsearch全文搜索引擎相结合&#xff0c;实现对病情相关数据的存储、查询和自动回答。通过与用户的交互&#xff0c;机器人可以根据用户提供的症状描述&#xff0c;给出初步的可…

【C++杂货铺】C++11新特性——可变参数模板

文章目录 一、可变模板参数相关概念的引入二、获取参数包中参数的个数三、递归函数方式展开参数包四、逗号表达式展开参数包五、可变模板参数的实际应用——emplace相关接口5.1 回顾一下 push_back 的三种用法5.2 emplace_back 使用方法介绍5.3 听说 emplace_back 可以提高效率…

SCT2601,可替代LMR16006X/MP2459/MP2456;4.5V-60V Vin,0.6A,高效降压DCDC转换器

•宽输入范围&#xff1a;4.5V-60V •高达0.6A的连续输出电流 •0.765V2.5%反馈参考电压 •集成500mΩ高压侧MOSFET •低静态电流为80uA •轻负载下的脉冲跳过模式&#xff08;PSM&#xff09; •最小接通时间80ns •内置6ms软启动时间 •开关频率为700KHz •可编程输入电压欠压…

探秘AI数字人克隆系统OEM源码:实现24小时无人值守直播间的奥秘

随着人工智能技术的不断发展&#xff0c;AI数字人克隆系统OEM源码正在引起广泛的关注。其中&#xff0c;实现24小时无人值守直播间成为了许多企业和机构的追求。本文将深入探讨如何利用AI数字人克隆系统OEM源码实现24小时无人值守直播间&#xff0c;并揭示其背后的奥秘。 一、…

Acrel-2000MG工商业储能站能量管理系统-光伏储能一体化解决方案

安科瑞 崔丽洁 Acrel-2000MG储能能量管理系统是安科瑞专门针对工商业储能电站研制的本地化能量管理系统&#xff0c;可实现了储能电站的数据采集、数据处理、数据存储、数据查询与分析、可视化监控、报警管理、统计报表、策略管理、历史曲线等功能。其中策略管理&#xff0c;支…

【活动回顾】ABeam 德硕 | 企业座谈及宣讲会--石河子大学专场

ABeam 石河子大学校招之旅 沙漠绿洲&#xff0c;戈壁明珠 近日&#xff0c;ABeam大中华区董事长兼总经理中野洋辅先生带领西安招聘团队来到新疆维吾尔自治区石河子市——石河子大学&#xff0c;与信息科学与技术学院领导就校企合作事宜进行了深入的座谈交流&#xff0c;并在随…

【Unity入门】UGUI之Slider(滑动条)

目录 一、什么是Slider&#xff1f;二、Slider属性与功能 一、什么是Slider&#xff1f; Slider控件允许用户可以通过鼠标来在预先确定的范围调节数值 我们可以在Hierarchy视图右键 -> UI ->Slider来创建滑动条 通过上图可以发现Unity内置的Slider主要有3部分&#x…

【web】vue 播放后端(flask)发送的 mp3 文件

文章目录 演示后端&#xff08;flask&#xff09;前端&#xff08;vue3&#xff09;重要说明 演示 后端&#xff08;flask&#xff09; 后端返回的是 mp3 文件的 url&#xff0c;是可以直接在浏览器上打开后播放的处理跨域请求pip install flask-cors后端代码from flask impor…

一场高规格品鉴会,窥探剑南春冲击高端的“野心”

执笔 | 洪大大 编辑 | 扬 灵 12月27日&#xff0c;以“锦绣巴蜀品味东方”为主题的剑南春东方红致敬中国时代品鉴会在有云鹿洄天府1911中国川菜体验中心举办&#xff0c;数十位媒体代表和嘉宾汇聚一堂&#xff0c;共同品味剑南春东方红的品质魅力&#xff0c;感知高端白酒品…

什么是缓存、为什么要用缓存、缓存分类、缓存测试、缓存更新、缓存设计考虑点、缓存测试点

一、缓存 缓存是一种将数据存储在高速缓存中的技术&#xff0c;它可以提高应用程序的性能和响应速度。 二、 为什么要用缓存 1. 高性能(主要目的) 查询耗时&#xff0c;但变化少&#xff0c;又有很多读请求情况下&#xff0c;可以将查询结果放到缓存中。减少对数据库的压力&…

光伏、储能一体化监控及运维解决方案 安科瑞 许敏

前言&#xff1a;今年以来&#xff0c;在政策利好推动下光伏、风力发电、电化学储能及抽水蓄能等新能源行业发展迅速&#xff0c;装机容量均大幅度增长&#xff0c;新能源发电已经成为新型电力系统重要的组成部分&#xff0c;同时这也导致新型电力系统比传统的电力系统更为复杂…

clang-format

Clang-Format Clang-Format Style Options — Clang 18.0.0git documentation VSCode 1.1 安装扩展 C 1.2 设置 1.3 使用 .clang-fornat 放置在项目&#xff08;代码&#xff09;文件夹下使用 .clang-fornat 为文件名 --- # https://clang.llvm.org/docs/ClangFormatStyle…

document360的替代品:原来它也这么好用

在当今信息爆炸的时代&#xff0c;企业和组织需要一个高效的知识管理系统来整理、存储和共享知识。document360是一款备受欢迎的知识库管理系统&#xff0c;但是它并非唯一的选择。本文将介绍document360的替代品&#xff0c;感兴趣就往下看吧。 首先&#xff0c;让我们来了解…

Python分析了京东7万+条评论,仅用3分钟,结果发现……

之前学习Python爬虫采集&#xff0c;为了练手用Scrapy写了一个爬虫&#xff0c;整整采集了京东平台vivo旗舰店7万多条评论。一直也没觉得这些评论数据有啥用&#xff0c;就留在MongoDB中吃灰。最近学了jieba和wordcloud之后&#xff0c;突发奇想着分析下这7万多条评论数据&…

【网络安全】上网行为代理服务器启用Alerts

文章目录 启用AlertsAlert Limits per 24 hoursEmail AlertsSystem Alerts Suspicious Activity AlertsPermitted Suspicious Activity AlertsBlocked Suspicious Activity Alerts Protocol&Category Usage Alerts告警邮件范例推荐阅读 这里的Web Proxy主要代指proxy serve…

HarmonyOS应用开发-搭建开发环境

本文介绍如何搭建 HarmonyOS 应用的开发环境&#xff0c;介绍下载安装 DevEco Studio 开发工具和 SDK 的详细流程。华为鸿蒙 DevEco Studio 是面向全场景的一站式集成开发环境&#xff0c;面向全场景多设备&#xff0c;提供一站式的分布式应用开发平台&#xff0c;支持分布式多…

声纹识别资源汇总(不断更新)

目录 一、任务说明二、指标三、声纹识别研究现状四、数据集开源&#xff08;1&#xff09;VoxCeleb&#xff1a;&#xff08;2&#xff09;WSJ and LibriSpeech Corpus&#xff08;3&#xff09;VOiCES Dataset&#xff08;4&#xff09;English Multi-speaker Corpus for Voic…

机器学习笔记(四)初识卷积神经网络

前言 第一次写卷积神经网络&#xff0c;也是照着paddlepaddle的官方文档抄&#xff0c;这里简单讲解一下心得。 首先我们要知道之前写的那些东西都是什么&#xff0c;之前写的我们称之为简单神经网络&#xff0c;也就是简单一层连接输出和输出&#xff0c;通过前向计算和逆向…