算法练习第四十二天|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.mzph.cn/news/789931.shtml

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

相关文章

nvme协议学习总结

一、nvme命令 1 nvme在pcie基础上的协议&#xff0c;与PCIE配合&#xff0c;实现高效传输。 2 nvme命令主要分IO命令和admin命令。 3 一个NVME CMD执行流程&#xff1a; step1&#xff1a;host把cmd写入SQ queue中&#xff1b; step2&#xff1a;host远端更新Device&#x…

BIT-5-动态内存管理(C语言进阶)

本章重点 为什么存在动态内存分配动态内存函数的介绍 mallocfreecallocrealloc常见的动态内存错误几个经典的笔试题柔性数组 1. 为什么存在动态内存分配 我们已经掌握的内存开辟方式有&#xff1a; int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈空间上开辟…

华为OD面试手撕算法-字符串压缩

题目描述 本题是leetcode原题&#xff1a;字符串压缩 字符串压缩。利用字符重复出现的次数&#xff0c;编写一种方法&#xff0c;实现基本的字符串压缩功能。比如&#xff0c;字符串"aabcccccaaa"会变为"a2b1c5a3"。若“压缩”后的字符串没有变短&#xf…

瑞吉外卖实战学习--12、分类管理的修改和删除接口实现

分类管理的修改和删除的接口实现 前言获取接口的方法修改接口的连接请求方式和参数删除接口的连接请求方式和参数 实现接口 前言 本篇实现分类的管理的修改和删除接口&#xff0c;在平时项目中最常用的就是增删改查接口&#xff0c;通过页面来的到请求的接口和方法然后通过创建…

在Java中对SQL进行常规操作的通用方法

SQL通用方法 一、常规方法增删改查二、具体优化步骤1.准备工作2.getcon()方法&#xff0c;获取数据库连接对象3.closeAll()方法&#xff0c;关闭所有资源4.通用的增删改方法5.通用的查询方法6.动态查询语句 总结 一、常规方法增删改查 在常规方法中&#xff0c;我们在Java中对…

数据挖掘|贝叶斯分类器及其Python实现

分类分析|贝叶斯分类器及其Python实现 0. 分类分析概述1. Logistics回归模型2. 贝叶斯分类器2.1 贝叶斯定理2.2 朴素贝叶斯分类器2.2.1 高斯朴素贝叶斯分类器2.2.2 多项式朴素贝叶斯分类器 2.3 朴素贝叶斯分类的主要优点2.4 朴素贝叶斯分类的主要缺点 3. 贝叶斯分类器在生产中的…

SD-WAN降低网络运维难度的三大关键技术

企业网络作为现代企业不可或缺的基础设施&#xff0c;承担着连接全球的重要任务。随着全球化和数字化转型的加速推进&#xff0c;企业面临着越来越多的网络挑战和压力。传统的网络组网方式已经不能满足企业规模扩大、分支机构增多、上云服务等需求&#xff0c;导致了网络性能下…

双机 Cartogtapher 建图文件配置

双机cartogtapher建图 最近在做硕士毕设的最后一个实验&#xff0c;其中涉及到多机建图&#xff0c;经过调研最终采用cartographer建图算法&#xff0c;其中配置多机建图的文件有些麻烦&#xff0c;特此博客以记录 非常感谢我的同门 ”叶少“ 山上的稻草人-CSDN博客的帮助&am…

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

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

VUE——概述

vue是前端框架&#xff0c;基于MVVM思想。 引入 从官网下载vue文件 <script src"js/vue.js"></script> 定义vue对象 new Vue({el: "#x",//vue接管区域&#xff0c;#表示选择器&#xff0c;x是id名字data: {message: "y"} })案例…

GICv3学习

中断分组 GICD_CTLR&#xff1a;配置是否支持group0、安全group1、非安全group1中断&#xff1b; 怎么配置中断在哪个组&#xff1b; 怎么知道中断是安全的还是非安全的&#xff1b; GICD_IGROUPR&#xff1a; 配置中断分组、中断是安全还是非安全&#xff1b; 4.4 软件产生中…

【SpringTask】快速入门

一、Spring Task 1.1 概述 介绍&#xff1a;(是什么&#xff1f; Spring Task 是Spring框架提供的任务调度工具&#xff0c;就是个定时任务框架 作用&#xff1a;(干啥的? 按照约定的时间 --》定时自动执行某段JAVA代码&#xff08;将某段逻辑功能实现&#xff09; 应用场景…

3.java openCV4.x 入门-数据类型(CvType)与Scalar

专栏简介 &#x1f492;个人主页 &#x1f4f0;专栏目录 点击上方查看更多内容 &#x1f4d6;心灵鸡汤&#x1f4d6;我们唯一拥有的就是今天&#xff0c;唯一能把握的也是今天 &#x1f9ed;文章导航&#x1f9ed; ⬆️ 2.hello openCV ⬇️ 4.待更新 数据类型&#xff…

U盘弹不出?事件查看器

使用完U盘或者硬盘遇到弹不出&#xff0c;是直接拔掉还是关机再拔&#xff1f; no no no 看这&#xff01; 1、开始菜单&#xff0c;或者叫“windows” 2.右键&#xff0c;点击按键“V”; 3.看到了事件查看器&#xff1b; 是PDF阅读器在占用文件&#xff1b; 关闭就正常了&…

yolov8姿态识别与绘制

YOLOv8姿态检测是一种基于深度学习的计算机视觉技术&#xff0c;用于识别图像或视频中人体的姿态。作为YOLO系列算法的最新版本&#xff0c;YOLOv8在姿态检测任务上展现出了卓越的性能和效率。以下将详细介绍YOLOv8姿态检测的原理、特点、应用以及训练过程。 一、YOLOv8姿态检…

进制转换器(C语言)

目录 1问题&#xff1a; 输入任意进制的数值&#xff0c;可以转换成任意进制的数值&#xff08;2到36进制&#xff09;; 2思路&#xff1a; 3代码&#xff1a;&#xff08;需要运用到数据结构栈的知识&#xff09; 4运行结果&#xff1a; 1问题&#xff1a; 输入任意进制的数…

算法知识点汇总

知识点 1. 求二进制中1的个数 int get_count(int x)//返回x的二进制有多少个1 int get_count(int x) {int res 0;while (x){res ;x - x & -x;}return res; }2. 建树&#xff0c;和树的DFS 记得初始化头节点 const int N 1e5 10, M N * 2; int h[N], e[M], ne[M], id…

Golang和Java的对决:从设计理念到工具链的全面比较

文章目录 使用率排名Golang和Java设计理念语法和类型系统并发处理资源消耗生态系统和工具链 结语 使用率排名 据最新的2024年3月 Tiobe 编程语言排行榜&#xff0c;目前 Golang 的使用率排名为第8呈上升趋势&#xff0c;Java 的使用率排名为第4呈下降趋势 2024年3月2023年3月…

用ENIGMA-toolbox作图

之前一直使用ggseg呈现结果&#xff0c;最近想试一试其他绘图工具。ENIGMA-toolbox有所了解&#xff0c;绘图功能看起来门槛不高&#xff0c;所以就试着用它呈现一些结果。Matlab版本的ENIGMA-toolbox直接使用就是SurfStat的功能绘图&#xff0c;Python版本的绘图功能应该是根据…

【Leetcode】top 100 回溯

基础知识补充 回溯中的组合问题&#xff1a; 优化&#xff1a;剪枝&#xff1a;在for循环时需要根据当前状态调整循环次数&#xff08;组合问题&#xff09; 基础操作补充 &#xff01;&#xff01;&#xff01;牢记模板&#xff01;&#xff01;&#xff01; result [] def b…