3分钟教你弄懂【01背包问题】

背包问题

介绍

将有限物品按找最大价值装进有限体积的背包中去

核心步骤

1.确定状态表示
2.确定边界遍历顺序
3.找到状态转移方程

先上 Coding

#include <iostream>
using namespace std;const int N = 300;
int itemSize[N];			//每件物品的大小(体积)
int itemValue[N]; 			//每件物品的价值
int dp[N][N];				//状态表示数组([物品序号][背包大小])
int m, n;					//m为背包体积 n为物品数量int main() {cin >> m >> n;for (int i = 1; i <= n; i++) {cin >> itemSize[i] >> itemValue[i];//依次输入每一件物品的体积和价值}for (int i = 1; i <= n; i++) {						//n物品数量for (int j = 1; j <= m; j++) { 					//m为背包体积if (itemSize[i] <= j) {//物品体积比j(背包容量)小,可以放进背包,取放和不妨两种情况价值Value的最大值dp[i][j] = max(dp[i-1][j], dp[i-1][j-itemSize[i]] + itemValue[i]);}else {//放不进去的情况dp[i][j] = dp[i-1][j];}}}cout << "dp数组:" << endl;for (int i = 0; i <= n; i++) {for (int j = 0; j <= m; j++) {cout << dp[i][j] << ' ';}cout << endl;}
}

手动遍历的结果

在这里插入图片描述

思路

  1. 首先遍历每一个物品
  2. 对每一个物品,遍历背包的大小
    对于每一种物品都有两种情况
  • 当前所遍历的背包大小放得下
  • 当前所遍历的背包大小放不下

    注意这里的背包指的是我们分解出来的子状态中的,是对于每一个物品,从0 ~ m(背包的大小),遍历了m+1个背包中的任意一种。

状态表示

dp[i][j]

  • i:表示从第1个物品i个物品这个范围
  • j:表示背包大小的一种可能性

边界

满足i==0 && j==0设置为 0

遍历顺序

遍历1~n物品,对每个物品遍历背包大小

状态转移方程

  • 如果拿不下

    dp[i][j] = dp[i-1][j]

  • 如果拿得下

    dp[i][j] = max(dp[ i - 1 ][ j ], dp[ i - 1 ] j-size[i]] + value[i])

解释一下这个转移方程中 max 内的两个参数:

  • dp[i-1][j] 表示这个除去这个物品(第 i 位物品)以外的0 ~ i-1个物品,也就是拿得下,但是你就是不拿这个物品的情况
  • dp[i-1][j - size[i]] + value[i]:这个式子由两个式子相加得来,左边的i-1依旧表示这个物品不拿,0 ~ i-1个物品的情况,j - size[i]表示拿了这个物品之后,剔除这个物品的背包大小的最优解,value[i]就表示这个物品的价值

剥离出来就是

  • dp[i-1][j]:除去这个物品,对应背包大小的最优解
  • j - size[i]:剔除这个物品的背包大小的最优解
  • value[i]:这个物品的价值

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

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

相关文章

《仙剑7》登陆Xbox主机平台年末大作空窗期

首发一年后&#xff0c;《仙剑奇侠传7》终于登陆Xbox主机平台&#xff0c;而这也恰逢Xbox平台年末大作的窗口期。 随着年底大作的稀缺&#xff0c;以及海外3A RPG《星空》的延期&#xff0c;2022年底的这段时间给Xbox玩家体验《刀剑7》留下了一段空白。 可以说是因祸得福。 《仙…

详解Python内建函数map()和reduce()

Python内建了map()和reduce()函数。 我们先看map。map()函数接收两个参数&#xff0c;一个是函数&#xff0c;一个是Iterable&#xff0c;map将传入的函数依次作用到序列的每个元素&#xff0c;并把结果作为新的Iterator返回。 现在&#xff0c;我们用Python代码实现&#xf…

【C语言】结构体详解

文章目录 1、前言2、结构体变量的创建和初始3、结构体的特殊声明3、结构体的自引用5、结构体的内存对齐5.1 对齐规则5.2 为什么存在内存对齐?5.3 修改对齐数 6、结构体实现位段6.1 什么是位段6.2 位段的内存分配6.3 位段的跨平台问题6.4 位段的应用6.5 位段使用的注意事项 7、…

春耕农业气象环境监测站来帮忙

春耕春种&#xff0c;是大地苏醒的序曲&#xff0c;是生机盎然的交响乐章。在这播种希望、耕耘未来的美好时节&#xff0c;{鸣乔电子科技}农业气象环境监测站犹如一位贴心的助手&#xff0c;为农业生产保驾护航。 随着科技的进步&#xff0c;农业气象环境监测站不再是简单的温…

前端必会的一些基础

1、如何把obj对象 添加到arr数组对象内 2、手机号、邮箱、隐藏用户手机号中间四位正则 3、两个数组 数组a未全部人员 数组b为已选中人员 默认选中 4、数组去重、 5、localStorage 存取 数组 方法 6、数据filter过滤 7、请求接口时header 请求格式不对 需要怎么转换&#xf…

电脑桌面便签软件,好用的电脑桌面便签工具

在数字化时代&#xff0c;我们的工作效率在很大程度上依赖于所选工具的优劣。优秀的工具能助力我们事半功倍&#xff0c;而低效的工具则可能导致我们陷入冗杂操作&#xff0c;白白耗费大量时间。在此&#xff0c;我要向大家推荐一款极为出色的电脑桌面便签软件--好用便签。 好…

java.lang.RuntimeException: java.lang.IllegalArgumentException

填上红框内容&#xff0c;亲测可行 报错如下&#xff1a; java: java.lang.IllegalArgumentException java.lang.RuntimeException: java.lang.IllegalArgumentExceptionat com.sun.tools.javac.main.Main.compile(Main.java:553)at com.sun.tools.javac.api.JavacTaskImpl.do…

【EPLAN】授权-MAX100.17问题解决

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决EPLAN 客户端授权连接时出现-MAX100.17 报错问题&#xff1b; 2、 问题场景 用于解决在EPLAN 客户端授权连接时&#xff0c;出现-MAX100.17 报错&#xff1a;无法建立与EPLAN Client Service[MAX 100.17] 的连…

【MATLAB源码-第9期】基于matlab的DQPSK的误码率BER和误符号率SER仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 DQPSK信号的解调与2DPSK信号的解调类似&#xff0c;也有两种方法&#xff0c;分别是极性比较法和相位比较法 极性比较法。其原理方框图如下图所示。由于DQPSK信号可以看做是两路2DPSK信号的合成&#xff0c;解 调时也可以分别…

Python:基础语法

一、import与from.....import 有时候我们需要使用一些第三方库或包时&#xff0c;我们就需要通过import或from.....import导入模块。 # 导入库 import sys print("hello,world") 当我们自己写了些函数&#xff0c;在其他py文件&#xff0c;我们也可以通过from.....im…

Anaconda配置系统环境

首先&#xff0c;右键此电脑&#xff0c;点击属性 点击高级系统设计 点击环境变量 点击环境变量中系统环境下的Path&#xff0c;双击 如下图&#xff0c;添加这四项即可&#xff0c;注意&#xff0c;这都是Anaconda的安装目录下的内容 在windowsR的cmd情况下&#xff0c;输入co…

动归专题——斐波纳契模型和路径问题

前提 本专题开始&#xff0c;注重整理与动态规划相关的题目&#xff0c;从简单的动归开始切入&#xff0c;慢慢掌握和练习动态规划这一重要的算法思想&#xff0c;部分相对复杂的题目会结合画图和代码分析去解释 一、第N个泰波纳契数列 1.链接 1137. 第 N 个泰波那契数 - 力…

C# NumericUpDown 控件正整数输入控制

用到了控件的 KeyPress 和 KeyUp事件。 KeyPress 中控制输入“点、空格&#xff0c;负号”&#xff1b; KeyUp 中防止删空&#xff0c;以及防止输入超过最大值或最小值 。 private void nudStart_KeyPress(object sender, KeyPressEventArgs e){numericUpDownKeyPress(sender…

Python时间

UTC ~ 北京时间 【差8小时】 格式化日期时间为字符串:strftime 时间戳-1970.1.1到现在的秒数:time.time() AttributeError: partially initialized module ‘datetime’ has no attribute ‘fromtimestamp’ (most likely due to a circular import) 改正&#xff1a;文件名和…

合同起草、审查耗时费力?君子签智能电子合同让签署事半功倍

在合同签署过程中&#xff0c;着急和客户签约&#xff0c;却找不到合适的内容范本&#xff1f;法务审查合同只能逐字逐句审查&#xff0c;效率太慢&#xff1f;合同需要客户、法务、负责人等多方参与&#xff0c;修改内容难以一一对应&#xff1f;合同涉及的工资、费用、价格等…

WordPress网站已经安装了SSL证书,但浏览器仍然提示不安全

WordPress网站已经安装了SSL证书&#xff0c;但浏览器仍然提示不安全 昨天我们新建了一个WordPress的网站&#xff0c;在已经安装了SSL证书的情况下&#xff0c;访问网站仍然会提示不安全。 我们使用的是Hostease提供的虚拟主机产品&#xff0c;之前从未出过这样的情况&#x…

用友BI方案:一键搞定财务、销售、生产等分析

别人家做用友的数据分析&#xff0c;从零开始搭建分析模型、设计BI数据可视化报表&#xff0c;反复测试修改&#xff0c;耗时耗力&#xff0c;效果未知。奥威BI做用友的数据分析&#xff0c;用用友BI方案&#xff0c;注册、下载执行&#xff0c;自动取数、计算指标、分析数据、…

达梦数据库自动备份(全库)+还原(全库) 控制台

一 前提 1.安装达梦数据库DB8(请参照以前文章) 我的数据库安装目录是 /app/dmDB8 2.已创建实例 (请参照上一篇文章) 二 准备测试数据 三 自动备份步骤 1.开启归档模式 开启DM管理工具管理控制台 弹不出来工具的 输入命令 xhost 第一步 将服务器转换为配置状态 右键-&g…

后端常问面经之Spring和Mybatis框架

Spring的IOC介绍一下&#xff1a; 所谓控制就是对象的创建、初始化、销毁。 创建对象&#xff1a;原来是 new 一个&#xff0c;现在是由 Spring 容器创建。 初始化对象&#xff1a;原来是对象自己通过构造器或者 setter 方法给依赖的对象赋值&#xff0c;现在是由 Spring 容器…

AI研报:从Sora看多模态大模型发展

《从Sora看多模态大模型发展》的研报来自浙商证券&#xff0c;写于2024年2月。 这篇报告主要探讨了多模态大模型的发展趋势&#xff0c;特别是OpenAI发布的视频生成模型Sora&#xff0c;以及其对行业发展的影响。以下是报告的核心内容概述&#xff1a; Sora模型的发布&#x…