【算法设计实验三】动态规划解决01背包问题

news/2023/12/1 4:30:19 标签: 算法, 动态规划, java, 01背包, 数据结构

请勿原模原样复制!

01背包dp具体解释详见链接 ↓  

算法5.1】背包问题 - 01背包 (至多最大价值、至少最小价值)_背包问题求最小价值_Roye_ack的博客-CSDN博客

关于如何求出最优物品选择方案?

  • 先在递归求dp公式时,若进行【选择】则在决策表ck中标记ck[i][j]=1 
  • 遍历求完dp公式后,逆向遍历决策表,从最后一个物品开始,如果ck[i][j]=1且ck[i-1][j-w[i]]=1,则标记st[i]=st[i-1]=1

java">import java.util.*;

public class hdjs {
	
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入物品数量和背包容量!");
		int n=sc.nextInt(),m=sc.nextInt();
		
		int[] st=new int[n+1]; //记录最终物品选择情况
		int[][] ck=new int[n+1][m+1];  //记录物品选or不选决策情况
		
		int[] w=new int[n+1],v=new int[n+1];
		System.out.println("请依次输入物品重量!");
		for(int i=1;i<=n;i++) w[i]=sc.nextInt();
	
		System.out.println("请依次输入物品价值!");
		for(int i=1;i<=n;i++) v[i]=sc.nextInt();
		
		int[][] f=new int[n+1][1010]; //f[i][j] 选择前i个物品,体积不超过j的最大价值
		
		f[0][0]=0;
		for(int i=1;i<=n;i++)
		{
			for(int j=0;j<=m;j++)
			{
				if(w[i]>j) //如果装不下该物品,则不选
					f[i][j]=f[i-1][j];
				else if(w[i]<=j) //如果可以装得下,则在求max(不选,选)
				{
					if(f[i-1][j-w[i]]+v[i]>f[i-1][j]) ck[i][j]=1;
					
					f[i][j]=Math.max(f[i-1][j],f[i-1][j-w[i]]+v[i]);
				}
			}
		}
		
		//逆向追踪最优方案
		int k=m;
		for(int i=n;i>=1;i--)
			if(ck[i][k]==1)
			{
				st[i]=1;
				k=k-w[i]; //判断减去该重量是否仍然为1
			}
		
		System.out.println("动态规划记录表如下!");
		for(int i=0;i<=n;i++)
		{
			for(int j=0;j<=m;j++)
				System.out.print(f[i][j]+" ");
			System.out.println();
		}
		System.out.println();
		
		System.out.println("物品最优选择情况如下!");
		for(int i=1;i<=n;i++) System.out.print(st[i]+" ");
		System.out.println();
		
		System.out.print("最大价值为"+f[n][m]);
		
	}
}

 


http://www.niftyadmin.cn/n/5200908.html

相关文章

用Auth Analyzer插件批量测试接口越权,安全测试快人一步!

随着信息化技术的不断发展&#xff0c;软件安全成了软件行业的重大挑战&#xff0c;因此安全测试也成为了测试人员必备的技能之一。 沐沐在安全测试过程中较为常见的就是接口越权漏洞&#xff0c;在尝试过多种工具进行越权漏洞测试后&#xff0c;最终找到了个人认为最便捷最有…

8.3 Windows驱动开发:内核遍历文件或目录

在笔者前一篇文章《内核文件读写系列函数》简单的介绍了内核中如何对文件进行基本的读写操作&#xff0c;本章我们将实现内核下遍历文件或目录这一功能&#xff0c;该功能的实现需要依赖于ZwQueryDirectoryFile这个内核API函数来实现&#xff0c;该函数可返回给定文件句柄指定的…

硬件寿命警告!Windows11在特定情况下对【固态硬盘】执行与【机械硬盘】相同的磁盘碎片整理。

首图&#xff0c;无图无真相 据我所知 此bug已持续约3个月。 此bug目前仍可以在Windows Feature Experience Pack 1000.25997.1000.0版本复现&#xff08;截至2023/11/21&#xff0c;最新的Windows预览金丝雀通道&#xff09; 如何复现 1 手动运行系统维护&#xff0c;点…

【用unity实现100个游戏之16】Unity程序化生成随机2D地牢游戏2(附项目源码)

文章目录 先看看最终效果前言生成走廊生成房间修复死胡同增加走廊宽度获取走廊位置信息集合方法一方法二 源码完结 先看看最终效果 前言 上期已经实现了房间的生成&#xff0c;本期紧跟着上期内容&#xff0c;生成走廊并结合上期内容生成连通的房间。 生成走廊 修改Procedur…

【算法之路】高精度算法(实现加减乘除)

目录 一、高精度概念 二、高精度算法的实现 1、高精度加法&#xff08;大整数相加&#xff09; 2、高精度减法&#xff08;大整数减法&#xff09; 3、高精度乘法&#xff08;大整数*小整数&#xff09; 4、高精度除法&#xff08;大整数/小整数&#xff09; 一、高精度概…

中国出海主力系列专访之三七互娱:亚马逊云科技助力三七互娱海外“出圈”之路

如果问&#xff0c;在众多的中国出海赛道中哪一条拥有基数最大的粉丝拥趸&#xff1f;以网络游戏、社交媒体、直播、短视频为代表的泛娱乐赛道便成为当仁不让的领跑者。 在东京、新加坡、开罗、伦敦、纽约、慕尼黑等国际都市&#xff0c;当地的年轻人会随时随地的打开“中国造”…

Java实现象棋算法

象棋算法包括搜索算法、评估函数和剪枝算法。以下是一个简单的实现&#xff1a; 搜索算法&#xff1a;使用极大极小值算法&#xff0c;即每个玩家都会做出最好的选择&#xff0c;考虑到对方也会做出最好的选择&#xff0c;所以需要搜索多层。 public int search(int depth, i…

JavaEE初阶--------第七章 HashMsp、HashTable 和 ConcurrentHashMap 之间的区别

系列文章目录 第七章 HashMsp、HashTable 和 ConcurrentHashMap 之间的区别 文章目录 系列文章目录第七章 HashMsp、HashTable 和 ConcurrentHashMap 之间的区别 一、多线程环境使用哈希表1、HashTable2、ConcurrentHashMap 总结 一、多线程环境使用哈希表 HashMap 本身不是线…

Rust语言精讲:数据类型全解析

大家好&#xff01;我是lincyang。 今天&#xff0c;我们将深入探讨Rust语言中的数据类型&#xff0c;这是理解和掌握Rust的基础。 Rust语言数据类型概览 Rust是静态类型语言&#xff0c;所有变量类型在编译时确定。Rust的数据类型分为两类&#xff1a;标量类型和复合类型。…

zabbix告警 邮件告警 钉钉告警

邮件告警添加主机组添加模板添加主机在模板中添加监控项在模板中添加触发器添加动作&#xff0c;远程执行命令给用户绑定告警媒介类型 钉钉告警安装python依赖模块python-requests配置钉钉告警配置脚本zabbix_ding.conf在目录/var/log/zabbix中创建钉钉告警日志文件zabbix_ding…

在springBoot中同时使用mysql和MongoDB

在SpringBoot中非关系向数据库MongoDB和关系型数据库MySQL都可通过引入相关依赖并按照指定配置单独集成; mysql引入依赖: compile "org.springframework.boot:spring-boot-starter-web:1.5.18.RELEASE"compile "org.springframework.boot:spring-boot-start…

Python 检测网络是否连通

1 使用 urlib import urllib.requestdef test_internet_connection():url https://www.baidu.comtry:urllib.request.urlopen(url, timeout5)print("网络连接正常")except urllib.error.URLError as ex:print("网络连接异常&#xff1a;" str(ex))test_…

Django 路由配置(二)

一、路由 就是根据用户请求的URL链接来判断对应的出来程序&#xff0c;并返回处理结果&#xff0c;也是就是URL和django的视图建立映射关系. 二、Django请求页面的步骤 1、首先Django确定要使用的根URLconf模块&#xff0c;通过ROOT_URLCONF来设置&#xff0c;在settings.py配置…

光伏、储能双层优化配置接入配电网研究(附带Matlab代码)

由于能源的日益匮乏&#xff0c;电力需求的不断增长等&#xff0c;配电网中分布式能源渗透率不断提高&#xff0c;且逐渐向主动配电网方向发展。此外&#xff0c;需求响应(demand response&#xff0c;DR)的加入对配电网的规划运行也带来了新的因素。因此&#xff0c;如何综合考…

做接口自动化遇到的20个难点,记录下我是如何解决的!

我是一名接口自动化测试工程师&#xff0c;在公司中负责接口自动化测试的设计和执行。在公司中&#xff0c;接口自动化测试非常重要&#xff0c;因为公司的业务场景非常复杂&#xff0c;需要保证接口的质量。在这篇文章中&#xff0c;我将分享我在公司中接口自动化测试遇到的20…

QT打包圆心识别

圆心点识别QT界面封装 最近在练习QT相关内容&#xff0c;找了个相关功能集成了下&#xff0c;主要是为了熟悉各个组件&#xff0c;功能主要是进行圆心识别。 主要涉及的QT功能点&#xff1a; 1.日志可视化 2.按钮及各类参数添加组件 3.水印添加及图片可视化 4.许可添加 5.主线…
最新文章