算法训练第四十二天|卡码网46. 携带研究材料、416. 分割等和子集

46. 携带研究材料:

题目链接
小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等,它们各自占据不同的空间,并且具有不同的价值。

小明的行李空间为 N,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料只能选择一次,并且只有选与不选两种选择,不能进行切割。

示例 :
输入描述:
第一行包含两个正整数,第一个整数 M 代表研究材料的种类,第二个正整数 N,代表小明的行李空间。
第二行包含 M 个正整数,代表每种研究材料的所占空间。
第三行包含 M 个正整数,代表每种研究材料的价值。
输出描述:
输出一个整数,代表小明能够携带的研究材料的最大价值。

输入:
6 1
2 2 3 1 5 2
2 3 1 5 4 3
输出:
5

解答:

import java.util.*;
class Solution {public static int maxValue(int m,int n,int[] space,int[] value) {int[][] dp = new int[m+1][n+1];for (int i = 0; i <=m ; i++) {dp[i][0] = 0;}for (int i = 0; i <=n ; i++) {dp[0][i] = 0;if(i>=space[0]){dp[1][i] = value[0];}else{dp[1][i] = 0;}}for (int i = 1; i <=m ; i++) {for (int j = 1; j <=n ; j++) {if (j < space[i-1]) {dp[i][j] = dp[i-1][j];continue;}dp[i][j] = Math.max(dp[i-1][j-space[i-1]] + value[i-1],dp[i-1][j]);}}return dp[m][n];}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt();int n = sc.nextInt();int[] space = new int[m];int[] value = new int[m];for (int i = 0; i <m ; i++) {space[i] = sc.nextInt();}for (int i = 0; i <m ; i++) {value[i] = sc.nextInt();}System.out.println(maxValue(m,n,space,value));}
}

算法(二维):

二维数组的背包问题还是比较好理解,我们需要知道题干中涉及两个变量:1.物品数量2.背包空间,所以我们设置出一个二维数组dp即可解决。而我们可以根据dp[i-1][j](不放i的j空间)和dp[i-1][j-space[i-1]] + value[i-1](放了i的情况)求最大值可得出结果。

解答:

import java.util.*;
class Solution {public static int maxValue(int m,int n,int[] space,int[] value) {int[] dp = new int[n+1];dp[0] = 0;for (int i = 0; i < m; i++){for (int j = n; j >= space[i]; j--){dp[j] = Math.max(dp[j], dp[j - space[i]] + value[i]);}}return dp[n];}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt();int n = sc.nextInt();int[] space = new int[m];int[] value = new int[m];for (int i = 0; i <m ; i++) {space[i] = sc.nextInt();}for (int i = 0; i <m ; i++) {value[i] = sc.nextInt();}System.out.println(maxValue(m,n,space,value));}
}

算法(一维):

背包问题的一维情况要更难理解一些,因为我们把处理两个变量变为处理一个,将另一个变量处理的情况,需要注意的是我们的for循环遍历过程中从最高的容量开始递减来以此避免出现重复添加的情况。

416. 分割等和子集:

题目链接
给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

示例 :

输入:nums = [1,5,11,5]
输出:true
解释:数组可以分割成 [1, 5, 5][11]

解答:

class Solution {public boolean canPartition(int[] nums) {int sum = 0;for (int i = 0; i <nums.length ; i++) {sum += nums[i];}if(sum%2==1)return false;int target = sum/2;int[] dp =new int[target+1];dp[0] = 0;for (int i = 0; i <nums.length ; i++) {for (int j = target; j >= nums[i] ; j--) {dp[j] = Math.max(dp[j-nums[i]] + nums[i],dp[j]);}}return dp[target]==target;}
}

算法总结:

本题本质上是一个01背包问题,我们在本题中把背包的价值和容量都看作为数组中的每个数字,再仿照基本的背包问题公式即可求解。

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

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

相关文章

马云笔下的AI电商时代,到底长啥样?

前两天&#xff0c;马云“惊现”阿里内网&#xff0c;正面回应拼多多市值接近阿里巴巴。 AI电商时代刚刚开始&#xff0c;对谁都是机会&#xff0c;也是挑战。要祝贺pdd过去几年的决策&#xff0c;执行和努力。谁都牛x过&#xff0c;但能为了明天后天牛而改革的人&#xff0c;…

页面置换算法详解专题

页面置换算法的功能是&#xff1a;当缺页中断发生&#xff0c;需要调入新的页面而内存已满时&#xff0c;选择内存当中哪个物理页面被置换~ 页面置换算法的目的&#xff1a;尽可能地减少页面的换进换出次数&#xff08;既缺页中断的次数&#xff09;。具体来说&#xff0c;把未…

论文笔记:Bilinear Attention Networks

更精简的论文学习笔记 1、摘要 多模态学习中的注意力网络提供了一种选择性地利用给定视觉信息的有效方法。然而&#xff0c;学习每一对多模态输入通道的注意力分布的计算成本是非常昂贵的。为了解决这个问题&#xff0c;共同注意力为每个模态建立了两个独立的注意分布&#x…

【YOLOv8量化】普通CPU上加速推理可达100+FPS

NNCF介绍 OpenVINO2023版本衍生出了一个新支持工具包NNCF(Neural Network Compression Framework – 神经网络压缩框架)&#xff0c;通过对OpenVINO IR格式模型的压缩与量化更好的提升模型在OpenVINO框架上部署的推理性能&#xff0c;github。 https://github.com/openvinoto…

JVM- 为什么G1垃圾回收器需要有大对象区

G1&#xff08;Garbage-First&#xff09;垃圾回收器在Java虚拟机&#xff08;JVM&#xff09;中引入了大对象区&#xff08;也称为Humongous Region或H-Region&#xff09;的概念&#xff0c;主要是为了高效地处理大型对象。在垃圾回收的上下文中&#xff0c;大对象指的是那些…

STM32单片机项目实例:基于TouchGFX的智能手表设计(5)硬件驱动层程序设计

STM32单片机项目实例&#xff1a;基于TouchGFX的智能手表设计&#xff08;5&#xff09;硬件驱动层程序设计 目录 一、 概述 二、 新建工程与外设配置 三、 TouchGFX配置 四、 增加TouchGFX关键驱动 一、 概述 本文内容主要进行工程新建&#xff0c;硬件外设的配置以及添加…

【Python】—— 如果使用matplotlib做数据可视化

matplotlib做数据可视化 相关知识掌握matplotlib的基本使用方法1. 折线图2. 散点图3. 柱状图4. 饼图5. 直方图6. 等高线图7. 图形定制 掌握数据处理的基本方法1. 数据筛选2. 缺失值处理3. 异常值处理 理解数据可视化的原则和方法1. 选择合适的图表类型2. 避免数据混淆3. 突出重…

【java IO】|java NIO总结

在传统的 Java I/O 模型&#xff08;BIO&#xff09;中&#xff0c;I/O 操作是以阻塞的方式进行的。也就是说&#xff0c;当一个线程执行一个 I/O 操作时&#xff0c;它会被阻塞直到操作完成。这种阻塞模型在处理多个并发连接时可能会导致性能瓶颈&#xff0c;因为需要为每个连…

Tarjan-割点问题

文章目录 前言割点定义割点的求解割点判定定理证明&#xff08;非严谨&#xff09; 算法实现算法流程代码详解 再看SCCOJ练习 前言 之前介绍Tarjan算法求强连通分量时&#xff0c;提到了代码段中对于访问过的邻接点应用其时间戳来更新追溯值&#xff0c;不是说用追溯值更新会导…

结果实例: 一个cpu的parsec结果

简介 限于篇幅限制&#xff0c;很多教程和论文只展示部分结果。我们这里展示非常细节的结果&#xff0c;包括输出的许多命令行结果。 运行命令行 的shell窗口 ./build/X86/gem5.opt -d m5out/onlyoneCPUkvmCheckPointDifferRCS20231218restore \configs/deprecated/example/…

剑指offer题解合集——Week1day3

剑指offerWeek1 周三&#xff1a;二维数组中的查找 题目链接&#xff1a;二维数组中的查找 在一个二维数组中&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个函数&#xff0c;输入这样的一个二维数组和一个整数…

教务系统一键评教

利用浏览器的开发者模式实现“一键评教”&#xff0c;本教程针对金智教务系统 步骤 1、打开教务系统的评教页面。 2、按下键盘快捷键 F12&#xff0c;或者点击鼠标右键打开浏览器的开发者工具&#xff0c;然后选择控制台&#xff08;Console&#xff09;。 3、复制以下 Java…

大数据机器学习-梯度下降:从技术到实战的全面指南

大数据机器学习-梯度下降&#xff1a;从技术到实战的全面指南 文章目录 大数据机器学习-梯度下降&#xff1a;从技术到实战的全面指南一、简介什么是梯度下降&#xff1f;为什么梯度下降重要&#xff1f; 二、梯度下降的数学原理代价函数&#xff08;Cost Function&#xff09;…

[德人合科技]——设计公司 \ 设计院图纸文件数据 | 资料透明加密防泄密软件

国内众多设计院都在推进信息化建设&#xff0c;特别是在异地办公、应用软件资产规模、三维设计技术推广应用以及协同办公等领域&#xff0c;这些加快了业务的发展&#xff0c;也带来了更多信息安全挑战&#xff0c;尤其是对于以知识成果为重要效益来源的设计院所&#xff0c;防…

vue内容渲染

内容渲染指令用来辅助开发者渲染DOM元素的文本内容。常用的内容渲染指令有3个 1.v-text 缺点&#xff1a;会覆盖元素内部原有的内容 2.{{}}&#xff1a;插值表达式在实际开发中用的最多&#xff0c;只是内容的占位符&#xff0c;不会覆盖内容 3.v-html&#xff1a;可以把带有标…

LeetCode-28. 找到字符串中第一个匹配项的下标

文章目录 KMP 算法基本概念next 数组含义及计算匹配过程 LeetCode-28.找到字符串中第一个匹配项的下标题目描述程序代码 KMP 算法 基本概念 S&#xff1a;文本串P&#xff1a;模式串next 数组&#xff1a;next[i]表示当模式串中第 i 个字符与文本串中某个字符不匹配时&#x…

MySQL表的增删改查(初阶)

CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。且增删改查&#xff08;CRUD&#xff0c;create&#xff0c;retrieve&#xff0c;update&#xff0c;delete&#xff09;数据库的核心模块。 1. 新增&#xff08;Create&#xff09; 实…

【数据结构】二叉树的模拟实现

前言:前面我们学习了堆的模拟实现&#xff0c;今天我们来进一步学习二叉树&#xff0c;当然了内容肯定是越来越难的&#xff0c;各位我们一起努力&#xff01; &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:数据结构 &#x1f448; &…

vscode ssh连接不上服务器的各种解决办法

超时 可能是因为服务器太慢&#xff0c;等太久而报错&#xff0c;可以将超时时间设置长一些。步骤如下图&#xff0c;我将超时时间改成了60&#xff08;或者更大&#xff0c;有时候服务器巨卡&#xff09;。 参考&#xff1a; https://www.jianshu.com/p/0a995acf1a2e 超时&a…

操作系统的界面

(1) 请说明系统生成和系统引导的过程。 解&#xff1a; 系统的生成过程&#xff1a;当裸机启动后&#xff0c;会运行一个特殊的程序来自动进行系统的生成&#xff08;安装&#xff09;&#xff0c;生成系统之前需要先对硬件平台状况进行检查&#xff0c;或者从指定文件处读取…