01背包问题(滚动数组实现的逻辑)

2023-05-16

package tttest;

public class mybetterbag {
	public static void main(String[] args)
	{
		int[] weight = {1,3,4};
		int bagsize = 4;
		int[] value = {15,20,30};
		happy(weight,value,bagsize);
	}
	public static void happy(int[] weight,int[] value,int bagsize)
	{
		//我们使用滚动数组来帮我们解决这道题
		//第一步,先定义dp,并且明确dp的含义
		int[] dp = new int[bagsize+1];
		//这里我们的dp意思是容量为i的背包,最多能装价值为dp[i]的东西
		//我们为什么使用一维数组而不使用二维数组呢?
		//我们使用一维数组的原理是什么呢?
		//我们先看二维数组时,我们的代码
		//dp[i][j] = Math.max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i])、
		//如果我们把i-1行直接复制到i行
		//则变成 dp[i][j] = Math.max(dp[i][j],dp[i-weight[i]][j]+value[i])
		//因为我们提前赋值了,如果,我们的值不变化,那么我们dp[i][j]的值就不变
		//本来是等于dp[i-1][j]的值,但是由于我们已经赋过值了,我们dp[i][j]的值本来就是dp[i-1][j]的值了
		//所以,我们就可以不变
		//与其我们把上一行的数值赋给下一行,不如我们直接在这一行进行修改
		//我们dp[j] = Math.max(dp[j],dp[j-weight[i]]+value[i])
		//当我们来到dp[j]的时候,我们dp[j]里面的值就是上一轮dp中的值,如果我们不加新物品,那么我们dp[j]的值就不用修改
		//所以,dp[j]中的值就不改变
		//但是如果我们的值需要修改呢?那么,我们的dp[j] = dp[j-weight[i]]+value[i]
		//大家回想一下,如果我们的dp[j]需要改变,在二维数组里面我们是怎么做的?
		//dp[i][j] = dp[i-1][j-weight[i]]+value[i]
		//我们为了方便,拿数组的本身来记录上一层的对应值,所以,我们的dp[j] = dp[j-weight[i]]+value[i]
		//但是这里还需要注意很重要的一点!!
		//我们拿数组本身记录上一层的数据,那么我们的数组j修改过后,就不再是上一层的数据了,他就变成这一层的数据了
		//如果我们选择从前往后遍历的话,当j-weight[i]回到前面的数据时,我们得到的不是我们想要到上一层数据,而是从上一层数据经过变化来到的本层的数据
		//这就不好了!,我们本来是dp[i-1][j-weight[i]]+value[i]
		//如果我们从前往后遍历的话,就成为了dp[i][j-weight[i]] + value[i]
		//这显然不对,为了避免使用被改变的数据,我们从后往前遍历
		//这样被修改的数据也是从后往前
		//就不用担心层数的问题了!
		for(int i = 0;i<weight.length;i++)
		{
			for(int j = bagsize;j>=weight[i];j--)
			{
				dp[j] = Math.max(dp[j],dp[j-weight[i]]+value[i]);
			}
		}
		System.out.println(dp[bagsize]);
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

01背包问题(滚动数组实现的逻辑) 的相关文章

  • Python:if 语句的基本使用

    今天 xff0c 我们将学习Python中if语句的基本使用 if 在Python中用作某个条件或值的判断 xff0c 格式为 xff1a span class token keyword if span 条件 span class tok
  • Python模块介绍使用:zmail模块读取邮箱内邮件信息

    hello xff0c 大家好 xff0c 我是wangzirui32 xff0c 今天来教大家如何使用zmail模块读取邮箱内邮件信息 xff0c 开始学习吧 xff01 1 zmail安装 在命令行中输入以下命令即可安装 xff1a p
  • Python模块介绍使用:Python-Markdown解析Markdown文本

    博文作者 wangzirui32 x1f496 喜欢的可以 点赞 收藏 关注哦 x1f44f 我的第155篇原创作品 x1f449 本文首发于CSDN xff0c 未经许可禁止转载 x1f60e hello xff0c 大家好 xff0c
  • 【python学习】——字符串

    字符串 一 字符串的驻留机制 xff08 1 xff09 在python中它是基本数据类型 xff0c 是一个不可变的字符序列 xff08 2 xff09 字符串的驻留机制 xff1a 仅保存一份相同且不可变字符串的方法 xff0c 不用的
  • Linux安装部署SonarQube9.9 代码审查工具

    Linux安装部署SonarQube9 9 代码审查工具 1 SonarQube 简介 2 SonarQube安装与配置 2 1 官方软件包版本要求 2 2 基础环境配置 2 3 安装SonarQube 2 4 安装并配置PostgreSQ
  • 【数据库】Postgresql 与 MySQL 比较

    目录 Postgresql 与 MySQL 比较历史支持平台二者底层特性库存储引擎对数据的管理表连接算法 应用场景面向开发使用 Postgresql 与 MySQL 比较 二者都是比较强大的数据库 xff0c 选择使用哪一个数据库需要结合实
  • H5的离线缓存技术

    离线存储可以将站点的一些文件存储在本地 xff0c 它是浏览器自己的一种机制 xff0c 将需要的文件缓存下来 在没有网络的时候可以访问到缓存的对应的站点页面 xff0c 包括html xff0c js xff0c css xff0c im
  • QEMU虚拟机怎么配置网络才能主机和虚拟机都通

    当打开QEMU虚拟机配置界面的时候 xff0c 可以看到多种网络模型 而其中默认使用的是NAT xff0c 你会发现 xff0c 当你创建完虚拟机直接去配置网络之后 xff0c 网络是不通的 然后切换为其他模式之后 xff0c 你会发现 x
  • 虚拟机设置开机启动自动运行脚本

    首先设置虚拟机开机免密码自动启动 2 设置好开机免密码之后 xff0c 在配置开机自动启动脚本 编写一个bat文件作为脚本 xff0c 并将它放入到如下目录中 C ProgramData Microsoft Windows Start Me

随机推荐

  • QEMU虚拟机怎么配置网络

    当打开QEMU虚拟机配置界面的时候 xff0c 可以看到多种网络模型 而其中默认使用的是NAT xff0c 你会发现 xff0c 当你创建完虚拟机直接去配置网络之后 xff0c 网络是不通的 然后切换为其他模式之后 xff0c 你会发现 x
  • 关于VMware上的VAAI特性详解

    一般来说我们的存储在适配VMware的时候 xff0c 会牵涉搭配VAAI特性 xff0c 经常听到VAAI这到底是什么呢 xff1f VAAI的全称是VMware s Storage APIs for Array Integration
  • Python2.7版本安装报错

    python E S m sysconfig generate posix vars Could not find platform dependent libraries lt exec prefix gt Consider settin
  • oracle的安装(Oracle11G release2)

    一 xff1a 准备工作 1 关闭selinux 永久关闭 设置SELINUX 61 disabled xff1a vim etc selinux config 2 关闭firewalld 安装iptables systemctl stop
  • openstack kilo单击版本安装-最简单的安装方式

    由于K版本已经比较老了 xff0c 甚至连源都已经不怎么找得到了 xff0c 但是有时候为了一些特定的需求 xff0c 需要安装K版本 xff0c 这就比较麻烦 xff0c 本文找了一个较为简单的方法来安装 xff0c 并且是单机安装 准备
  • 本地显示远程服务器图形界面

    解决方案 序号方案简单区别方案一Xmanager1 VNC连接时及时突然中断 xff08 比如断网 xff09 xff0c 不影响操作进行 xff1b 2 不需要在服务器上装软件 xff0c 需要在你的电脑上装相应软件 xff0c 使用SS
  • SQL解析json(包含单层解析、多层解析)解析的数据可直接存到表中

    单层json解析 声明变量 declare 64 JsonData nvarchar max 61 39 34 BillName 34 34 12345765 34 34 SendDate 34 34 2022 11 10T00 00 00
  • MySQL查看当前使用的配置文件my.cnf的方法

    MySQL查看当前使用的配置文件my cnf的方法 MySQL实例在启动时 xff0c 会先读取配置参数文件my cnf my cnf一般会放在MySQL的安装目录中 xff0c 用户也可以放在其他目录加载 安装MySQL后 xff0c 系
  • Latex 之 微分符号d的竖立表达 {\rm d}

    微分符号d竖立表达 rm d
  • Abaqus 导出XYdata的几种方式

    目录 方法一 xff1a 通过Plu ins gt Tools gt Excel Utilities xff0c 将XY Data直接到Excel文件里 xff01 方式二 xff1a Report gt XY xff0c 导出默认 rpt
  • ABAQUS 显示应力/应变场的最大/最小值

    如下图所示 xff0c 可以显示最大最小值 具体数据导出 xff1a Report gt Field Output 导出结果 场输出 xff08 Field output xff09 同一时刻 xff0c 不同位置 xff1b 历史输出 H
  • mac下重装系统,应用程序副本已损坏 的解决办法

    首先需要确定电脑的年份和对应的系统 xff0c 简单的道理是老的电脑硬件是不适配最新系统的 xff0c 我需要安装的是10 12的系统 系统来源 xff1a 黑苹果 年份确定 xff1a 2017年9月之前生产的电脑 我用的是U盘安装的方法
  • mysql查看数据库的容量及表容量

    select table schema sum DATA LENGTH 43 sum INDEX LENGTH from information schema tables group by table schema 在需要备份数据库里面的
  • 【数据结构-栈】借助栈实现回文的判断

    数据结构 栈 借助栈实现回文的判断 最近在学习栈 xff0c 尝试用C实现了一些功能 include lt stdio h gt include lt stdlib h gt typedef struct app char date str
  • C语言实现冒泡排序

    冒泡排序作为学习排序最基本的算法 xff0c 具有稳定性与实用性 下面是C语言冒泡排序的源代码 include lt stdio h gt int main void int a 10 61 6 4 3 2 7 8 9 10 1 5 int
  • C语言实现快速排序算法

    快排作为公认最优秀的排序方法 xff0c 是每一个程序员都应该掌握的 xff0c 那么 xff0c 今天就由我来为大家简单讲解一下快速排序算法的代码 源代码如下 xff1a include lt stdio h gt void quicks
  • C语言实现二分查找

    相较于线性查找 xff0c 二分查找在面对大量数据时的效率更高 xff0c 但它的缺点是只能对有序数组进行查找 源代码如下 xff1a include lt stdio h gt void binarysearch int a int su
  • 约瑟夫环详解

    package newjosephu public class myfinaljosephu 你可能会说crazy 我只想说ez xff01 public static void main String args circlelinkedl
  • ECS弹性云服务器常用端口、安全组

    弹性云服务器常用端口 弹性云服务器常用端口如 表1 所示 您可以通过配置安全组规则放通弹性云服务器对应的端口 xff0c 详情请参见 添加安全组规则 表1 弹性云服务器常用端口 协议 端口 说明 FTP 21 FTP服务上传和下载文件 SS
  • 01背包问题(滚动数组实现的逻辑)

    package tttest public class mybetterbag public static void main String args int weight 61 1 3 4 int bagsize 61 4 int val