算法设计与分析——动态规划——01背包问题

算法分析与设计(一)——0-1背包问题 文章目录1. 背包问题1.1 0-1背包问题 在简单复习完数据结构以后,便开始了算法复习。本博客将结合复习视频与LeetCode题目,面向机考算法复习。 1. 背包问题 1.1 0-1背包问题 (1)问题描述 在背包容量有限的情况下,带走总价值最多的物品。 输入: 背包容量C n个商品组成集合,每个商品有两个属性viv_ivi​和pip_ipi​,分别表示体积和价格。 约束条件 最大化价值:max⁡∑i∈Spi\max \sum_{i \in S}p_imax∑i∈S​pi​ 背包容量限制:∑i∈Sv 阅读详情

在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<iomanip>
using namespace std;
//前i个物品装入容量为j的背包中获得的最大价值

//0-1背包动态规划算法   构造二维表
int  knapsack_problem( int n,int *weight,int *value,int capacity,int **m,int *flag)
{
	for(int i=0;i<=capacity;i++)//赋值第一行 为0 
	{
		m[0][i]=0;// 初始化:背包容量为0时,前i个物品无法装入,获得最大价值为0
	}
	for(int i=0;i<=n;i++)//第一列赋值为0 
	{
		m[i][0]=0;//初始化:物品数量为0时,背包容量j无论多大,获得最大价值为0
	} 
	
	for(int i=1;i<=n;i++) //构造二维表:行对应前i个物品;列对应背包容量j
	{
		for(int j=1;j<=capacity;j++)
		{
			if(j<weight[i])  	//背包容量不够第i个物品的重量大
			{
				m[i][j]=m[i-1][j]; //不装,获得的最大价值仍然等于前i-1个物品装入情况的
			}
			else
			{	//装,看看是装入后获得的最大价值大还是前i-1个物品装入情况的最大价值大,比较后选择最大的
				m[i][j]=max(m[i-1][j],m[i-1][j-weight[i]]+value[i]);
			}
		}
	 } 
	 //标记那个物品最终放到了背包里了吗 
	  int temp_capacity=capacity;//于背包的最大容量C 
	 for(int i=n;i>0;i--)//从后往前遍历,如果装了第i个物品则标志位x[i]=1
	 {
	 	if(m[i][temp_capacity]>m[i-1][temp_capacity])//判断第i个物品有没有装进去
	 	{
	 		flag[i]=1;	//第i个物品装了进去
	 		temp_capacity=temp_capacity-weight[i];//装了进去就将该物品的重量减去,j为剩余容量
		 }
		 else
		 {
		 	flag[i]=0;//第i个物品没装进去
		 }
	 }
	 cout << "选中的物品是:";
	 for(int i=1;i<=n;i++)
	 {
	 	cout<<flag[i]<<" ";
	 }
	 cout<<endl;
	 
	 
	 return m[n][capacity];
	
}
int main()
{
	int n,capacity;
	cout<<"请输入背包的最大容量:";
	cin>>capacity;
	cout<<"请输入物品的总数:";
	cin>>n;
	int weight[n+1],value[n+1];
	cout<<"请输入物品的重量:";
	for(int i=1;i<=n;i++)
	{
		cin>>weight[i];
	}
	cout<<"请输入物品的价值:";
	for(int i=1;i<=n;i++)
	{
		cin>>value[i];
	}
	
	int **m=new int *[n+1];//开辟行 
	for(int i=0;i<=n;i++)
	{
		m[i]=new int [capacity+1];//开辟列 
	}
	
	int flag[n+1];
	
	 
	cout<< "获得的最大价值为:"<<knapsack_problem(n,weight,value,capacity,m,flag)<<endl;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=capacity;j++)
		{
			cout<<setw(4)<<m[i][j]<<" ";
			
		}
		cout<<endl;
	}
	
}

在这里插入图片描述

算法分析与设计课程实验——TSP问题与01背包问题的动态规划算法实现 前言:这门课程教材为清华出版社的算法设计与分析第二版,这本书上的代码,以及学校实验,实验报告,PTA实验编程题等资源,我都会放在Gitee仓库中。 new(albert)/算法分析与设计 /* * @Description: * @version: * @Author: * @Date: 2021-04-24 16:06:25 * @LastEditors: Please set LastEditors * @LastEditTime: 2021-04-24 18:28:26 */ // 重点理解子集的. 阅读详情

相关推荐

算法设计分析总结------更新中(自用)

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。给定一个大小为 n 的数组 nums ,返回其中的多数元素。定义太冗长,直接记通俗理解就行-------(O为上界,阶数越小越精确,Ω为下界,阶数越大越精确)。F(n) = F(n - 1) + F(n - 2),其中 n > 1。你可以假设数组是非空的,并且给定的数组总是存在多数元素。找权重比最大的 放入背包,再放其次大的,依次类推;

m0_48570930的博客 330

动态规划-01背包问题详解 c++

01背包问题 有 N件物品和一个容量为 V的背包,每件物品有各自的价值且只能被选择一次,要求在有限的背包容量下,装入的物品总价值最大 动态规划入门题目,运用闫氏dp分析法 v[i]表示每个物品的体积,w[i]表示每个物品的价值 f[i][j]表示从前i个物品中选,总体积不大于j的选法的集合 对于第i个物品 若不选他,则相当于从前i-1个物品中选,总体积不大于j的选法 -> f[i-1][j] 若选他,先将第i个物品拿出来,且令j减去第i个物品的体积v[i] -> 则相当于在前i-1个物品选,总体

sjystone的博客 1920

山东科技大学算法设计与分析实验3:0-1背包问题的动态规划算法实现 cpp+报告

全都是自己写的,都能跑出来 实打实写的哦~ 1.掌握动态规划算法思想。 2.掌握最优子结构原理。 3.了解动态规划一般问题,并利用动态规划解决0-1背包问题。 预览地址:https://blog.youkuaiyun.com/weixin_42214698/article/details/118932693

算法题之动态规划-01背包问题

文字介绍解决背包问题 假设山洞里共有a,b,c,d ,e这5件宝物(不是5种宝物),它们的重量分别是2,2,6,5,4,它们的价值分别是6,3,5,4,6,现在给你个承重为10的背包, 怎么装背包,可以才能带走最多的财富。 此时只要理解了状态转换方程f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j] },就知道这道算法的答案了,这个状态转换方...

IT乾坤的博客 5325

VMware共享磁盘配置实战:从零搭建多机共享存储环境

本文详细介绍了在VMware环境中从零开始配置共享磁盘的完整实战流程。通过创建共享磁盘、挂载至多台虚拟机并修改.vmx配置文件等关键步骤,帮助用户搭建可用于数据库集群(如Oracle RAC)测试的多机共享存储环境,并提供了核心参数设置与常见问题排查指南。

weixin_29284201的博客 492

【科研导航】【计算机视觉与图像处理】从顶刊到潜力股:跨学科(电子/电气/信息)SCI期刊投稿全景图

本文全面解析了计算机视觉与图像处理领域的SCI期刊投稿策略,涵盖从顶刊到潜力股的各类期刊特点。重点介绍了IEEE Transactions系列、Elsevier旗舰期刊以及二区优质期刊的审稿偏好和投稿技巧,特别适合电子/电气/信息交叉学科的研究者。文章还提供了三区、四区期刊的实用投稿建议,帮助科研新手快速找到适合的发表平台。

weixin_30897233的博客 81

【动态规划算法(dp算法)】之背包问题

动态规划 01背包

大龄烤红薯的博客 1640

网络抓包实战:如何捕获与解析802.1Q VLAN标签报文

在网络通信中,数据包是信息传输的基本单元,而VLAN(虚拟局域网)技术通过在数据链路层插入802.1Q标签,实现了网络流量的逻辑隔离与高效管理。其核心原理是在标准以太网帧头中嵌入4字节的VLAN标识,使交换机能够根据VID(VLAN ID)进行精准转发。掌握VLAN报文的捕获与解析技术,对于网络故障排查、安全审计和性能优化具有重要价值,尤其在需要验证网络隔离策略或诊断Trunk链路异常时。本文聚焦于使用Wireshark工具,结合端口镜像等实操方法,详细演示如何抓取并解读携带802.1Q标签的原始报文,帮助

weixin_33417488的博客 382

算法分析与设计——动态规划求解01背包问题

算法分析与设计——动态规划求解01背包问题,包含代码,python实现。

计算机硕士的博客 1360

JW01二氧化碳传感器实战:5分钟搞定Arduino环境监测系统(附完整代码)

本文详细介绍了如何使用JW01二氧化碳传感器与Arduino快速搭建环境监测系统。通过简单的硬件连接和完整的代码示例,读者可以在5分钟内实现CO2浓度实时监测,并了解数据解析、常见问题解决及进阶应用扩展。JW01传感器的高精度和易用性使其成为创客和嵌入式开发者的理想选择。

kite3的博客 382

USB2.0物理层实战:手把手教你用示波器抓取D+/D-信号(附波形分析)

本文是一份针对硬件工程师的USB2.0物理层信号调试实战指南。文章详细讲解了如何使用示波器捕获和分析D+/D-差分信号,从基础设置、核心信号状态解读,到信号完整性分析与常见问题排查,手把手教你定位USB通信故障。内容涵盖USB2.0协议物理层关键概念,并附有基础解码思路,旨在提升工程师的底层调试能力。

s8t9u0v1w的博客 450

【动态规划】01背包问题——算法设计与分析

介绍了01背包问题,并介绍了蛮力枚举、带备忘递归、动态规划的解决策略。并总结了动态规划求解问题的基本步骤。

友人帐_的博客 3044

【RT-DETR实战】RT-DETR实战手记(200):端侧实时目标检测,下一步往哪儿走?

昨天深夜调一个模型部署,在树莓派4B上跑RT-DETR-nano,帧率死活卡在8FPS上不去。量化也做了,算子也优化了,内存对齐也检查了,可就是离实时检测的底线还差一截。盯着终端里跳动的数字,突然意识到——我们可能正在接近当前技术路径的瓶颈。端侧实时目标检测的下一个突破口,恐怕不在现有框架的修修补补里。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 186

算法设计与分析实验二:动态规划法求解TSP问题和01背包问题

利用动态规划算法编程求解TSP问题,并进行时间复杂性分析;利用动态规划算法编程求解0-1背包问题,并进行时间复杂性分析。

qq_61996033的博客 4890

【芯片设计- 芯片生产及测试 11.2 -- memory repair 详细介绍】

SoC (System on Chip) 的 Memory Repair 是一种技术,用于检测和修复内存中的损坏单元。由于SoC内部集成了大量的逻辑和存储单元,包括RAM(随机访问存储器)、ROM(只读存储器)、缓存等,在制造过程中,由于工艺偏差或材料缺陷,有可能产生一些损坏的内存位。Memory Repair 机制允许系统检测这些错误并采取措施纠正,以提高芯片的产量和可靠性。

CodingCos的博客 3222

PCL ICP算法实现点云精配准【2026最新版】

PCL1.14.1 及之前版本所实现的迭代最近点ICP算法。博客长期更新,本文最新更新时间为:2026年4月17日。

点云侠的博客 31万+

算法设计与分析--01背包问题(动态规划法解决)

算法设计与分析--01背包问题(动态规划法解决)

p15097962069的博客 743

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【算法设计与分析】第7篇:01背包问题的动态规划建模与空间优化

背包问题是动态规划最具代表性的应用场景之一。本文从01背包的建模入手,严格推导状态转移方程与填表过程,重点分析从二维动态规划表压缩至一维滚动数组的空间优化技术,并以此为基础简要讨论完全背包与多重背包的变形逻辑。

2301_80672009的博客 366

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【中国大学MOOC】算法设计与分析-动态规划- 01背包问题-Java

1. 问题 2.核心思想 问题结构分析——递推关系建立——自底向上计算——最优方案追踪 3. 算法伪代码

t949500898的博客 437

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

动态规划算法解决01背包问题的优化及分析

观察发现,optp[i][j]只 与optp[i-1][j]和optp[i-1][J—weight[i]]有关,与 optp[k][1](k=1,2,……,i一2,i+l,……由于我们的dp[i][j]的值由optp[i-1][j]和dp[i-1][j-Vi]两个位置的状态值确定,两点在d[x][y]的上方或者忧伤,所以填表顺序从上往下填写。(有三件物品),三个物品的重量为{20,15,10},三个物品的价值为{20,30,25},对于一个最大承重为25的背包,求包中物品的组合最大的价值是多少?

m0_71503225的博客 1647

算法设计与分析 - 动态规划实验2

01背包,投资问题,基因序列问题

z383101168的博客 386
上一篇: 算法设计与分析———动态规划———最大子段和
下一篇: 算法设计与分析——贪心算法——活动安排问题
943802606
博客等级 码龄6年 1万+粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值