算法练习第四十二天|01背包问题、416. 分割等和子集

一些背包问题
背包问题分类
01背包问题
题目描述

小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等,它们各自占据不同的空间,并且具有不同的价值。
小明的行李空间为 N,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料只能选择一次,并且只有选与不选两种选择,不能进行切割。

输入描述

第一行包含两个正整数,第一个整数 M 代表研究材料的种类,第二个正整数 N,代表小明的行李空间。 第二行包含 M
个正整数,代表每种研究材料的所占空间。 第三行包含 M 个正整数,代表每种研究材料的价值。

输出描述

输出一个整数,代表小明能够携带的研究材料的最大价值。

/**
使用二维数组
**/
import java.util.*;public class Main {public static void main(String[] args) {//dp数组含义 dp[i][j] 下标是0-i的物品任取,放进容量是j的物品//递推公式//dp[i][j] 容量为j时//  不妨物品i: dp[i-1][j]//          妨物品i : dp[i-1][j-weight[i]] + value[i];// 背包容量 N// 物品种类 MScanner sc = new Scanner(System.in);int M = sc.nextInt();int N = sc.nextInt();int[] values = new int[M];int[] weights = new int[M];for(int i = 0; i < M;i++) {weights[i] = sc.nextInt();}for(int i = 0; i < M;i++) {values[i] = sc.nextInt();}int[][] dp = new int[M][N+1];// 初始化//如果第一个weights,大于最大容量,则还是0for(int i = weights[0]; i <= N; i++) {dp[0][i] = values[0];}// 先物品for(int i = 1; i < M; i++) {// 后背包容量for(int j = 0; j <= N; j++) {if(weights[i] > j) {//i的重量大于背包容量,只能没法放了,取i-1最大值dp[i][j] = dp[i-1][j];} else {//i的重量小于于背包容量//可方可不妨,取放或者不妨再容量j的条件下的最大值dp[i][j] = Math.max(dp[i-1][j],dp[i-1][j-weights[i]] + values[i]);}}}System.out.println(dp[M-1][N]);}
}/**
一维数组(滚动数组)
**/import java.util.*;public class Main {public static void main(String[] args) {//dp数组含义 dp[i][j] 下标是0-i的物品任取,放进容量是j的物品//递推公式//dp[i][j] 容量为j时//  不妨物品i: dp[i-1][j]//          妨物品i : dp[i-1][j-weight[i]] + value[i];// 背包容量 N// 物品种类 MScanner sc = new Scanner(System.in);int M = sc.nextInt();int N = sc.nextInt();int[] values = new int[M];int[] weights = new int[M];for(int i = 0; i < M;i++) {weights[i] = sc.nextInt();}for(int i = 0; i < M;i++) {values[i] = sc.nextInt();}int wLen = weights.length;//定义dp数组:dp[j]表示背包容量为j时,能获得的最大价值int[] dp = new int[N + 1];//遍历顺序:先遍历物品,再遍历背包容量for (int i = 0; i < wLen; i++){//倒序遍历是为了保证物品i只被放入一次!for (int j = N; j >= weights[i]; j--){dp[j] = Math.max(dp[j], dp[j - weights[i]] + values[i]);}}System.out.println(dp[N]);}
}
  1. 分割等和子集
class Solution {public boolean canPartition(int[] nums) {int len = nums.length;int sum = 0;for(int ele : nums){sum += ele;}if(!(sum %2 ==0)) return false;int target = sum/2;//dp[i] 重量等于价值//dp[target] == target;//推导公式//dp[j] = Math.max(dp[j] ,dp[j-nums[i]]+nums[i])int[] dp = new int[target+1];dp[0]=0;for(int i =0;i<len;i++){for(int j=target;j>=nums[i];j--){dp[j] = Math.max(dp[j] ,dp[j-nums[i]]+nums[i]);}}return dp[target] == target;}
}

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

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

相关文章

蓝桥杯嵌入式学习笔记(9):RTC程序设计

目录 前言 1. RTC介绍 2. 使用CubeMx进行源工程配置 3. 代码编程 3.1 准备工作 3.2 进行bsp_rtc.h编写 3.3 进行bsp_rtc.c编写 3.4 main.c编写 3.4.1 头文件引用 3.4.2 变量声明 3.4.3 子函数声明 3.4.4 函数实现 3.4.5 main函数编写 4. 代码实验 5. 总结 前言 因本人备赛蓝…

如何使用 Python 本地客户端操作读写云服务器 Redis 缓存数据库详细教程(更新中)

Redis 基本概述 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的使用 ANSI C 语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库&#xff0c;并提供多种语言的 API。它通常被称为数据结构服务器&#xff0c;因为值&#xff08;value…

Kubernetes(k8s):如何进行 Kubernetes 集群健康检查?

Kubernetes&#xff08;k8s&#xff09;&#xff1a;如何进行 Kubernetes 集群健康检查&#xff1f; 一、节点健康检查1、使用 kubectl 查看节点状态2、查看节点详细信息3、检查节点资源使用情况 2、Pod 健康检查2.1、 使用 kubectl 查看 Pod 状态2.2、 查看特定 Pod 的详细信息…

2012年认证杯SPSSPRO杯数学建模D题(第一阶段)人机游戏中的数学模型全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 减缓热岛效应 D题 人机游戏中的数学模型 原题再现&#xff1a; 计算机游戏在社会和生活中享有特殊地位。游戏设计者主要考虑易学性、趣味性和界面友好性。趣味性是本质吸引力&#xff0c;使玩游戏者百玩不厌。网络游戏一般考虑如何搭建安全可…

zabbix 7.0 新增功能亮点(一)——T参数

概要&#xff1a; T参数是zabbix7.0新增的一项功能&#xff0c;它支持对配置文件进行可用性验证&#xff0c;即zabbix程序(server/proxy/agent等)修改配置文件后&#xff0c;支持-T或–test-config参数验证配置参数可用性。 T参数主要包含以下三个方面的应用场景&#xff1a; …

解决Centos7无法连接网络和访问网页连接不上问题

一、网络无法连接问题 网络无法连接的问题我查到了一个很良心的操作&#xff0c;不用重装&#xff0c;因为可能是你虚拟机设置上的问题。我先写我的解决方案&#xff0c;再附上其他几种解决方案。 问题一&#xff1a; 虚拟机的问题****加粗样式 解决&#xff1a; &#xff08;…

ImportError: cannot import name ‘PILLOW_VERSION‘ from ‘PIL‘

原因&#xff1a;torchvision模块在运行时要调用PIL模块的PILLOW_VERSION函数&#xff0c;但PILLOW_VERSION在Pillow 7.0.0之后的版本被移除了&#xff0c;Pillow 7.0.0之后的版本使用__version__函数代替PILLOW_VERSION函数。 解决方法&#xff1a;降低pillow版本即可。 参考…

人工智能应用工程师怎样报名,费用多少,就业机会怎么样?

人工智能应用工程师是能够利用人工智能相关技术进行应用研发&#xff0c;并开展各类工作的从业人员统称。为贯彻落实《国务院关于印发新一代人工智能发展规划的通知》、工业和信息化部《促进新一代人工智能产业发展三年行动计划&#xff08;2018-2020年&#xff09;》等文件精神…

JUC:原子类型的使用(原子整数、原子引用、原子数组、字段更新器、累加器)

文章目录 原子类型AtomicInteger 原子整数AtomicReferenc 原子引用AtomicStampedReference 带版本号的原子引用AtomicMarkableReference 仅记录是否修改的原子引用AtomicXXXArray 原子数组AtomicXXXFieldUpdater 字段更新器LongAdder累加器 原子类型 AtomicInteger 原子整数 …

部署项目遇到的各种问题总结

文章目录 前言一、后端问题 jar包运行出现错误宝塔面板使用jdk17二、数据库问题 版本问题三、前端问题 连不上后端总结 前言 在做完项目之后&#xff0c;为了让别人访问到自己的网站&#xff0c;就需要部署前端后端以及数据库&#xff0c;但是在部署的过程中出现了各种问题和困…

vue-quill-editor 富文本编辑器(可上传视频图片),组件挂载的方式实现

1.安装 npm install vue-quill-editor --save npm install quill-image-drop-module --save npm install quill-image-resize-module --save2.在组件下面新增组件 QlEditor (1)index.vue <template><div><div idquillEditorQiniu><!-- 基于element…

如何制作不同类型的二维码?快捷在线生码的3个步骤

怎么简单快速的完成二维码制作呢&#xff1f;现在二维码可以做很多的用途使用&#xff0c;比如可以用于内容展示、下载文件、播放音视频、扫码看图等等。那么上面讲述的这些类型二维码该如何制作呢&#xff0c;相信有很多的小伙伴都会二维码制作的技巧非常感兴趣。那么下面就让…