01背包问题详解

01背包问题是动态规划问题的子背包问题,算是蓝桥杯以及CSP较为常考的一种题型。

这种问题是有一个板子的,非常简单

#include <bits/stdc++.h>
using namespace std;

int k[200],v[200],dp[130][130];
int main() {
	int t,m;
	cin>>t>>m;
	for (int i=1;i<=m;i++){
		cin>>k[i]>>v[i];
	}
	for (int i=1;i<=m;i++){
		for (int j=0;j<=t;j++){
			if (k[i]>j)dp[i][j]=dp[i-1][j];
			else dp[i][j]=max(dp[i-1][j],dp[i-1][j-k[i]]+v[i]);
		}
	}
	cout<<dp[m][t];
	return 0;
}

但是如果我们遇到了t与m特别大特别大的情况的话,就会爆空间,直接jj,所以我们要优化空间复杂度,怎么办呢?用滚动数组!

所以优化后的板子又来了

#include <bits/stdc++.h>
using namespace std;

int k[200],v[200],dp[13000];
int main() {
	int t,m;
	cin>>t>>m;
	for (int i=1;i<=m;i++){
		cin>>k[i]>>v[i];
	}
	for (int i=1;i<=m;i++){
		for (int j=0;j<=t;j++){
			if (k[i]<=j)dp[j]=max(dp[j],dp[j-k[i]]+v[i]);
		}
	}
	cout<<dp[t];
	return 0;
}

会了吗?会了的话就要使用,所以我们来看例题吧!

例题1

有一个容量为m(m<=20000)的背包,现在有n(n<=2000)个物品,体积为v[i],价值分别为w[i],现要你装入一些物品,使得在体积小于等于m的情况下,价值尽可能大。

分析

典型的标准的01背包的模板题,所以直接用

例题2

P1048 [NOIP2005 普及组] 采药 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

分析

这道题与正常的01背包问题有点区别,这道题有病,那就是这道题没有排序,所以我们要在j的那个循环那里从t开始,这样就可以避免答案不正确的情况

例题3

有一个容量为m(m<=20000)的背包,现在有n(n<=2000)个物品,体积为v[i],现要你装入一些物品使得体积和最大

分析

这道题就更简单了,直接在模板的基础上删除存储价值的数组,然后将所有的使用价值数组的地方改成体积数组就可以了

例题4

有一个容量为m(m<=20000)的背包,现在有n(n<=2000)个物品,体积为v[i],价值分别为w[i],现要你装入一些物品,使得在体积恰好等于m的情况下,价值尽可能大,如果无法满足要求,输出“-1”。

分析

这道题有点考思路,咱们先用二维dp的思想来考虑一下,如果是0个物体放在空间为j的背包里,会有情况吗?不会啊,所以我们要把dp[0][j]的值全部都设成负无穷(INT_MIN)但是dp[0][0]不能设置成负无穷,因为0个物体放在空间为0的背包里是可以的。所以要将dp[0][0]设成0。

现在二维的我们想清楚了,就该考虑滚动数组的了,其实dp[0][0]设为0,就是在滚动数组里将dp[0]设为0,其余的都设成负无穷就可以了,灰常的简单。

看到这里你学废了吗你学会了吗,没学会再看一遍,如果还没学会就直接问我吧。

跪谢王大佬,陈厚节老师,杨老师提供思路

 看了这么久,作者也写了这么久,能不能点一个赞,在收藏一下呢?最好的话在点个关注吧

谢谢啦!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【鸿蒙HarmonyOS开发笔记】常用组件介绍篇 —— Toggle切换按钮组件

概述 Toggle为切换按钮组件&#xff0c;一般用于两种状态之间的切换&#xff0c;例如下图中的蓝牙开关。 参数 Toggle组件的参数定义如下 Toggle(options: { type: ToggleType, isOn?: boolean })● type type属性用于设置Toggle组件的类型&#xff0c;可通过ToggleType枚举…

【MIT 6.S081】2020, 实验记录(9),Lab: file system

目录 Task 1&#xff1a;Large filesTask 2&#xff1a;Symbolic links2.1 增加一个系统调用 symlink2.2 新增文件类型2.3 新增 NOFOLLOW 标志位2.4 实现 sys_symlink 系统调用2.5 修改 sys_open 函数2.6 测试 Task 1&#xff1a;Large files 现在的 xv6 系统中&#xff0c;一…

基础:TCP三次握手做了什么,为什么要握手?

1. TCP 三次握手在做些什么 1. 第一次握手 &#xff1a; 1&#xff09;握手作用&#xff1a;客户端发出建立连接请求。 2&#xff09;数据处理&#xff1a;客户端发送连接请求报文段&#xff0c;将SYN位置为1&#xff0c;Sequence Number为x;然后&#xff0c;客户端进入SYN_S…

Swagger Array 使用指南:详解与实践

Swagger 允许开发者定义 API 的路径、请求参数、响应和其他相关信息&#xff0c;以便生成可读性较高的文档和自动生成客户端代码。而 Array &#xff08;数组&#xff09;是一种常见的数据结构&#xff0c;用于存储和组织多个相同类型的数据元素。数组可以有不同的维度和大小&a…

几个精品声音模型

AI技术提取某位歌手的音色&#xff0c;再用其替换另一位歌手音色的方式&#xff0c;可以实现接近歌手本人翻唱的逼真效果。无需学习其他伪音技巧&#xff0c;即可实现实时男女声音互换等等。 使用 RVC 及模型工具&#xff0c;可以实现以下几个功能&#xff1a; 音乐干声分离&…

【兔子机器人】实现从初始状态到站立

一、遥想星空up主的方法 由于我有卡位结构&#xff0c;无法做到劈腿&#xff0c;而且底盘也不一样&#xff0c;无法使用此方法 但是其代码思想是可以借鉴的。 参考视频&#xff1a; 【【开源啦&#xff01;】无刷轮腿平衡机器人】 【精准空降到 01:16】 https://www.bilibili…

uniapp 对video视频组件嵌套倍速按钮

这次接了需求是要求有倍速功能&#xff0c;去看了文档发现并没有倍速按钮的属性&#xff0c;想着手写一个吧 可最后发现原生层级太高&#xff0c;无论怎么样都迭不上去&#xff0c;就只能去找插件看看咯 找了好多插件发现都不可用&#xff0c;因为我这是app端&#xff0c;有些视…

旅游管理系统|基于SpringBoot+ Mysql+Java+Tomcat技术的旅游管理系统设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 用户功能 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参考 …

深度学习——数据预处理

一、数据预处理 为了能用深度学习来解决现实世界的问题&#xff0c;我们经常从预处理原始数据开始&#xff0c; 而不是从那些准备好的张量格式数据开始。 在Python中常用的数据分析工具中&#xff0c;我们通常使用pandas软件包。 像庞大的Python生态系统中的许多其他扩展包一样…

【JVM篇】类的生命周期

文章目录 &#x1f354;类的生命周期概述⭐加载⭐连接⭐初始化⭐类的卸载 &#x1f354;类的生命周期概述 Java类的生命周期包括加载&#xff08;Loading&#xff09;、验证&#xff08;Verification&#xff09;、准备&#xff08;Preparation&#xff09;、解析&#xff08;R…

TrueNAS怎么设置中文,最新2024版本安装详细说明

首先我们做好安装前的准备工作 1&#xff0c;ISO镜像安装包 2&#xff0c;虚拟机&#xff08;建议使用ESXI虚拟机环境&#xff09; 如果是物理机安装&#xff0c;建议先给底层安装虚拟机系统esxi&#xff0c;再在上面安装方便以后的管理&#xff0c;如果你想物理机直接安装&a…

【Redis】缓存穿透

问题发生背景&#xff1a;客户端请求的数据再缓存中和数据库中都不存在。 导致的问题&#xff1a;缓存永远不会生效&#xff0c;这些请求都会去请求数据库—导致数据库压力增大。 解决方案&#xff1a; 1.缓存空对象 在Redis中缓存空对象&#xff0c;告诉客户端数据库中没有该值…

zookeeper快速入门五:用zookeeper实现服务注册与发现中心

系列&#xff1a; zookeeper快速入门一&#xff1a;zookeeper安装与启动-CSDN博客 zookeeper快速入门二&#xff1a;zookeeper基本概念-CSDN博客 zookeeper快速入门三&#xff1a;zookeeper的基本操作 zookeeper快速入门四&#xff1a;在java客户端中操作zookeeper-CSDN博客…

【Python】线程—GIL—asyncio

文章目录 一、Python 线程二、threading 模块三、例程3.1 基本用法3.2 同步3.21 Lock&#xff08;锁&#xff09;3.22 RLock&#xff08;递归锁&#xff09;3.23 Condition&#xff08;条件变量&#xff09;3.24 Semaphore&#xff08;信号量&#xff09; 四、GIL4.1 简述4.2 详…

MySQL教程-SQL

SQL(Structured Query Language)结构化查询语言&#xff0c;操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型数据库统一标准。 语法 SQL语句可以单行或多行书写&#xff0c;以;为结束标记SQL可以使用空格或缩进来增强语句的可读性SQL分单行注释(-- 注释内容 或 …

跨境电商应该用什么样的服务器?多大带宽?

跨境电商在选择服务器 和带宽时&#xff0c;需要考虑多个因素&#xff0c;包括业务规模、用户数量、网站流量、地理位置等。下面是一些关键考虑因素&#xff1a; 1、服务器类型 跨境电商通常会选择使用云服务器&#xff0c;因为云服务器具有灵活性、可扩展性和高可用性。云服务…

做户用光伏代理赚钱吗

随着全球能源危机的加剧和环境问题的日益严重&#xff0c;清洁能源的开发和利用成为了一个重要的议题。光伏发电作为一种绿色、可再生的能源&#xff0c;在全球范围内得到了广泛的关注和应用。 一、代理农村光伏项目挣钱吗 随着国家对光伏发电的政策支持和补贴&#xff0c;以及…

关 于 重 燃 学 习 的 热 情

3月1日是我回学校的第一天。经历了长达8个月在家的昏暗时刻&#xff0c;我这10天的感觉和在家的感觉发生了翻天覆地的变化&#xff0c;最明显的莫过于学习状态的改变。 倒不是说在家学的不好&#xff0c;而是说在学校&#xff0c;我对学习的整体感觉&#xff0c;以及专注程度&…

鸿蒙开发学习:【驱动子系统】

OpenHarmony驱动子系统采用C面向对象编程模型构建&#xff0c;通过平台解耦、内核解耦&#xff0c;兼容不同内核&#xff0c;提供了归一化的驱动平台底座&#xff0c;旨在为开发者提供更精准、更高效的开发环境&#xff0c;力求做到一次开发&#xff0c;多系统部署。 为了缩减…

避雷!又新增一本SCI被标记On Hold,共16本!

毕业推荐 IEEE&#xff08;CCF-C类&#xff09; • 计算机医学类&#xff0c;7.5-8.0&#xff0c;JCR1区&#xff0c;中科院2/1区&#xff08;TOP&#xff09; • 3-4个月左右录用 SCIE&#xff1a; • 计算机类&#xff0c;6.5-7.0&#xff0c;JCR1区&#xff0c;中科院2…