01背包详解(二维到一维)

news2025/1/16 1:47:44

 

有 N件物品和一个容量为 V 的背包,每件物品有各自的价值且只能被选择一次,要求在有限的背包容量下,装入的物品总价值最大。「0-1 背包」是较为简单的动态规划问题,也是其余背包问题的基础。

动态规划是不断决策求最优解的过程,「0-1 背包」即是不断对第 i个物品的做出决策,「0-1」正好代表不选与选两种决定。

二维代码实现

#include<iostream>
using namespace std;
const int N=1e3+10;
int v[N],w[N],f[N][N];

int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>v[i]>>w[i];
	
	
	for(int i=1;i<=n;i++){
		for(int j=0;j<=m;j++){
			f[i][j]=f[i-1][j];  //当前背包容量j<v[i],所以前i个物品最大值与前i-1个相同  
			if(j>=v[i])   //如果j>v[i],进行选择放与不放第i个物品
			f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i]);
		}
	}
	cout<<f[n][m]<<endl;
	return 0;
}

一维代码 

#include<iostream>
using namespace std;
const int N=1e3+10;
int v[N],w[N],f[N];

int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>v[i]>>w[i];
	
	
	for(int i=1;i<=n;i++){
		for(int j=m;j>=a[i];j--){
			f[j]=max(f[j],f[j-v[i]]+w[i]);  //背包容量是从大到小的因此j一定大于a[i] 
		}
	}
	cout<<f[m]<<endl;
	return 0;
}
for(int j=m;j>=a[i];j--){
			f[j]=max(f[j],f[j-v[i]]+w[i]);  //背包容量是从大到小的因此j一定大于a[i] 
		}

一定要从m开始进行逆序计算,在二维情况下f[i][j]是由i-1的状态得来的,f[i][j]与f[i-1][j]是完全独立的,但是当我们优化到一维后我们可能会在该使用i-1的位置用到i,例如,一维状态第i轮对体积为 3的物品进行决策,则f[7]f[4]更新而来,这里的f[4]正确应该是f[i - 1][4],但从小到大枚举j这里的f[4]在第i轮计算却变成了f[i][4]。当逆序枚举背包容量j时,我们求f[7]同样由f[4]更新,但由于是逆序,这里的f[4]还没有在第i轮计算,所以此时实际计算的f[4]仍然是f[i - 1][4]

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

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

相关文章

基于Stm32的宠物自动喂食装置(包含::论文、代码、外文原文、外文翻译、手册、建模、答辩PPT、原理图等 )

基于Stm32的宠物自动喂食装置 目录 基于Stm32的宠物自动喂食装置 一、Solidworks建模部分 装置外壳 二、TLink物联网平台 1.TLINK平台配置 2.TLINK平台的功能 &#xff08;2&#xff09;定时发送指令 &#xff08;3&#xff09;自动报警 三、Stm32控制部分 1.整体流程图…

STM32 DHT11

DHT11 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。 使用单总线通信 该传感器包括一个电容式感湿元件和一个NTC测温元件&#xff0c;并于一个高性能8位单片机相连&#xff08;模数转换&#xff09;。 DHT11引脚说明 开漏模式下没有输出高电平的能…

代码调试2:coco数据集生成深度图

代码调试:coco数据集生成深度图 作者:安静到无声 个人主页 问题1:图片存在异常,跳过不处理 在获取深度图的时候,直接执代码,会产生以下错误:RuntimeError和ValueError。 因此我重新修改了代码,如果出现以下两种错误,则执行下一次循环,代码如下: 修改之后代码可以…

Day11-Webpack前端工程化开发

Webpack 一 webpack基本概念 遇到问题 开发中希望将文件分开来编写,比如CSS代码,可以分为头部尾部内容,公共的样式。 JS代码也希望拆分为多个文件,分别引入,以后代码比较好维护。 本地图片,希望可以实现小图片不用访问后端,保存在前端代码中就可以了 运行程序时我…

火山引擎DataLeap的Data Catalog系统搜索实践 (上)

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 摘要 火山引擎大数据研发治理套件 DataLeap的Data Catalog系统通过汇总和组织各种元数据&#xff0c;解决了数据生产者梳理数据、数据消费者找数和理解数的业务场景…

生产事故-记一次特殊的OOM排查

0x01 事故背景 2023年3月10日14时19分&#xff0c;C公司开发人员向A公司开发人员反映某开放接口从2023年3月10日14时许开始无法访问和使用。该系统为某基础数据接口服务&#xff0c;基于 HTTP 协议进行通信。按照惯例&#xff0c;首先排查网络是否异常&#xff0c;经运维人员检…

【NX】NX开发入门练习寻找倒圆角设置颜色和添加属性

实现功能如标题&#xff0c;当时学习nx开发用的练习题&#xff0c;用的是nx8.5的32位版本&#xff0c;对于设置属性&#xff0c;一种是可以在界面中查看的属性&#xff0c;一种是隐藏的不能再界面中查看的自定义属性&#xff08;但是可以正常读取&#xff09;。 下面是完整代码…

Netty:ByteBuf的引用计数

说明 Netty的ByteBuf有一个对它本身的引用计数。 可以通过ByteBuf的retain()增加1个引用计数&#xff0c;通过retain(int increment)增加一定数量的引用计数。 通过release()减少1个引用计数&#xff0c;通过release(int decrement)减少一定数量的引用计数。 通过refCnt()查看…

科普 | 以太坊坎昆升级是什么

坎昆升级是什么 坎昆&#xff0c;是墨西哥一个著名的旅游城市&#xff0c;也是 Devcon 3 大会的举办地&#xff0c;按照以太坊升级命名的规律&#xff0c;以地名命名的升级&#xff0c;是针对以太坊执行层的升级。 之前同样命名的还有柏林升级、伦敦升级和这次的上海升级等。…

webapi部署几个错误

第一个错误&#xff1a;无法读取配置节“system.serviceModel”&#xff0c;因为它缺少节声明 发现服务器上没有安装.net Framework 3.5.1 第二个错误&#xff1a;未能从程序集“SYSTEM.SERVICEMODEL, VERSION3.0.0.0 先安装.net framework 4.0再安装 3.5 就会出现这个问题…

8.3线程状态

new: 调用start()方法之前的状态. blocked: 因为锁而阻塞. waiting: 因为调用wait()方法而阻塞. timed_waiting: 因为调用sleep()方法而阻塞. terminated: run()方法执行完毕之后线程的状态.

opencv-33 图像平滑处理-中值滤波cv2.medianBlur()

中值滤波是一种常见的图像处理滤波技术&#xff0c;用于去除图像中的噪声。它的原理是用一个滑动窗口&#xff08;也称为卷积核&#xff09;在图像上移动&#xff0c;对窗口中的像素值进行排序&#xff0c;然后用窗口中像素值的中值来替换中心像素的值。这样&#xff0c;中值滤…

【Valgrind】Valgrind安装(ubuntu系统)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

SonarQube入门 - 搭建本地环境

一、SonarQube是什么&#xff1f; SonarQube是一种自我管理的自动代码审查工具&#xff0c;可以系统地帮助您交付干净的代码。作为我们Sonar 解决方案的核心元素 &#xff0c;SonarQube 集成到您现有的工作流程中并检测代码中的问题&#xff0c;以帮助您对项目执行持续的代码检…

GD32F103VE点灯

GD32F103VE点灯主要用来学习端口引脚的输出配置。它由LED.c&#xff0c;LED.h&#xff0c;SoftDelay.c和main.c组成。 #include "gd32f10x.h" //使能uint8_t,uint16_t,uint32_t,uint64_t,int8_t,int16_t,int32_t,int64_t #include "SoftDelay.h"#include …

企业微信小程序在调用wx.qy.login时返回错误信息qy.login:fail

原因是大概是绑定了多个企业但是在开发者工具中没有选择正确的企业 解决方法&#xff1a; 重新选择企业后即可成功获取code

BS框架说明

B/S架构 1.B/S框架&#xff0c;意思是前端&#xff08;Browser 浏览器&#xff0c;小程序、app、自己写的&#xff09;和服务器端&#xff08;Server&#xff09;组成的系统的框架结构 2.B/S框架&#xff0c;也可理解为web架构&#xff0c;包含前端、后端、数据库三大组成部分…

考研/面试 数据结构大题必会代码(理解+记忆,实现使用C++,STL库)

文章目录 一. 线性表1. 逆置顺序表所有元素2. 删除线性链表中数据域为 item 的所有结点3. 逆转线性链表(递归(快速解题)非递归)4. 复制线性链表&#xff08;递归&#xff09;5. 将两个按值有序排列的非空线性链表合并为一个按值有序的线性链表 二. 树1. 建立二叉树&#xff08;…

【快应用】同时传递事件对象和自定义参数 ,无法正确接收事件对象

【关键词】 事件绑定、自定义参数、事件对象 【问题背景】 在快应用中采用如下方式绑定组件的事件方法&#xff0c;同时传递事件对象和自定义参数&#xff0c;发现回调方法中没有正确接收到事件对象。 问题代码如下&#xff1a; <template><!-- Only one root nod…

2023年信息系统项目管理师-粗略了解整体主要知识脉络

1. 五大过程组 2.十大知识领域 3. 十大知识领域与五大过程组的关系 4. 十大知识领域的关系图