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

news2024/10/7 2:22:13

请勿原模原样复制!

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

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.coloradmin.cn/o/1234300.html

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

相关文章

【广州华锐互动】VR溺水预防教育:在虚拟世界中学会自救!

在现代社会中&#xff0c;水上安全和救援行动的重要性不言而喻。尤其在自然灾害、游泳事故或航海事故中&#xff0c;有效的救援行动可以挽救许多生命。然而&#xff0c;传统的救援训练往往存在成本高、风险大、效率低等问题。在这样的背景下&#xff0c;虚拟现实&#xff08;VR…

vue3的两个提示[Vue warn]: 关于组件渲染和函数外部使用

1. [Vue warn]: inject() can only be used inside setup() or functional components. 这个消息是提示我们&#xff0c;需要将引入的方法作为一个变量使用。以vue-store为例&#xff0c;如果我们按照如下的方式使用&#xff1a; import UseUserStore from ../../store/module…

如何把A3 pdf 文章打印成A4

1. 用Adobe Acrobat 打开pdf 2 打印 选择海报 进行调整即可如下图,见下面红色的部分。

2024测试工程师必学的Jmeter:利用jmeter插件收集性能测试结果汇总报告和聚合报告

利用jmeter插件收集性能测试结果 汇总报告&#xff08;Summary Report &#xff09; 用来收集性能测试过程中的请求以及事务各项指标。通过监听器--汇总报告 可以添加该元件。界面如下图所示 汇总报告界面介绍&#xff1a; 所有数据写入一个文件&#xff1a;保存测试结果到本地…

Jieba库——中文自然语言处理的利器

中文作为世界上最广泛使用的语言之一&#xff0c;其复杂的结构和丰富的表达方式给中文文本处理带来了挑战。为了解决这些问题&#xff0c;Python开发者开发了一系列用于处理中文文本的工具和库&#xff0c;其中最受欢迎和广泛应用的就是Jieba库。Jieba是一个开源的中文分词工具…

设计模式—命令模式

1.什么是命令模式&#xff1f; 命令模式是一种行为型设计模式&#xff0c;核心是将每种请求或操作封装为一个独立的对象&#xff0c;从而可以集中管理这些请求或操作&#xff0c;比如将请求队列化依次执行、或者对操作进行记录和撤销。 命令模式通过将请求的发送者&#xff0…

京东数据分析软件(京东平台数据分析):2023年Q3扫地机器人行业消费报告

随着90后、00后逐渐成为消费主力军&#xff0c;他们对生活品质更加关注、健康意识进一步增强&#xff0c;再加上“懒人经济”的盛行&#xff0c;人们对扫地机器人的使用率和关注热情也不断增长。 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年7月份-9月份&#xf…

软件测评中心进行安全测试有哪些流程?安全测试报告如何收费?

在当今数字化时代&#xff0c;软件安全测试是每个软件开发团队都不能忽视的重要环节。安全测试是指对软件产品进行系统、全面的安全性评测与检测的过程。它旨在发现并修复软件中存在的漏洞和安全隐患&#xff0c;以确保软件能够在使用过程中保护用户的数据和隐私不被非法访问和…

ML-Net:通过深度学习彻底改变多标签分类

一、说明 多标签分类是一项具有挑战性的机器学习任务&#xff0c;其中输入可以同时属于多个类。传统的多标签分类方法通常依赖于将问题转化为一系列二元分类任务或使用集成方法。然而&#xff0c;深度学习的出现开创了多标签分类的新时代&#xff0c;ML-Net 等模型突破了该领域…

Linux系统编程 系统编程概念

1.系统调用 系统调用&#xff08;system call&#xff09;其实是 Linux 内核提供给应用层的应用编程接口&#xff08;API&#xff09;&#xff0c;是 Linux 应用层进入内核的入口。不止 Linux 系统&#xff0c;所有的操作系统都会向应用层提供系统调用&#xff0c;应用程序通过…

(论文阅读51-57)图像描述3 53

51.文献阅读笔记&#xff08;KNN&#xff09; 简介 题目 Exploring Nearest Neighbor Approaches for Image Captioning 作者 Jacob Devlin, Saurabh Gupta, Ross Girshick, Margaret Mitchell, C. Lawrence Zitnick, arXiv:1505.04467 原文链接 http://arxiv.org/pdf/1…

PHP中isset() empty() is_null()的区别

在PHP中&#xff0c;isset()、empty()和is_null()是用于检查变量状态的三个不同的函数。它们分别用于检查变量是否已设置、是否为空以及是否为null。在本文中&#xff0c;我们将详细解释这三个函数的用法、区别和适当的使用场景。 isset(): isset()函数用于检查一个变量是否已…

SystemV

一、共享内存 1、直接原理 进程间通信的本质是&#xff1a;先让不同的进程&#xff0c;看到同一份资源&#xff01;&#xff01; 我们要把这句话奉若圭臬一般 到了共享内存了支持双向通信能读也能写&#xff0c;但是一般都是一个读一个写 要想通信先看到同一个份资源&#xff0…

Spring-IOC-FactoryBean机制(难点且重点)

1、第一个案例 1.1、Book.java package com.atguigu.ioc; import lombok.Data; Data public class Book {private String bid;private String bname; }1.2、Book2.java package com.atguigu.ioc; import lombok.Data; Data public class Book2 extends Book {private String co…

数字化转型导师坚鹏:数字化时代银行网点厅堂营销5大难点分析

数字化时代银行网点厅堂营销存在以下5大难点&#xff1a; 1、识别难。识别有效的客户比较难&#xff0c;传统的厅堂识别主要依据客户的衣着气质等主管感受&#xff0c;判断客户是否为潜在中高端客户&#xff0c;提供相关服务。大堂经理主管识别与智能化系统识别相结合&#xf…

新安装win11,搜索框无法输入的问题

正确的做法是如下: 1首先进入win11系统&#xff0c;在搜索框中输入“ 控制面板 ”将其打开2在控制面板中找到“时间和语言“ 标题 再选择“ 语言和区域”, 标题 在显示的语言上面&#xff0c;点击省略号&#xff0c;进入语言选项 标题 在键盘处&#xff0c;删除不需要的输入法…

speech studio-神经网络定制自己的声音

Speech Studio - 神经网络定制声音 - 概述 (microsoft.com)

Zero-Shot Restoration of Back-lit Images Using Deep InternalLearning

ABSTRACT 如何恢复背光图像仍然是一项具有挑战性的任务。该领域最先进的方法基于监督学习&#xff0c;因此通常仅限于特定的训练数据。在本文中&#xff0c;我们提出了一种用于背光图像恢复的“零样本”方案&#xff0c;该方案利用深度学习的力量&#xff0c;但不依赖于任何先…

从大模型到内容生成,初窥门径的AI新次元

视频云AI进化新纪元。 最近Gartner发布2024年十大战略技术趋势&#xff0c;AI显然成为其背后共同的主题。全民化的生成式人工智能、AI增强开发、智能应用......我们正在进入一个AI新纪元。 从ChatGPT的横空出世&#xff0c;到开发者大会的惊艳亮相&#xff0c;OpenAI以一己之力…

JVM--Java虚拟机

0. java代码的执行过程 了解Java虚拟机&#xff08;JVM&#xff09;首先需要了解一下一段Java代码的具体执行过程。 Java代码的具体执行过程如下&#xff1a; 执行 javac 命令编译源代码为字节码执行 java 命令&#xff0c;二进制字节码通过解释器翻译为机器码 创建 JVM&…