【代码+详解】算法题 : 骨头收集者

❗❗❗必看:
下列题我全部都使用 Java 语言写的,并且均可以提交成功,获得Accepted 结果的. 如果代码和详解看了之后,对答案有任何疑问,都可以在评论区提出来,我都会一个一个回答.

❗❗❗感谢大家的支持,如果喜欢我的博客,关注 点赞 收藏 评论一波,非常感谢!!!

文章目录

  • 题目:骨头收集者
    • 测试样例
    • 代码
    • 详解
      • 初步思路
      • 具体步骤
      • 总结方法

题目:骨头收集者

许多年前,在泰迪的家乡,有一个被称为“骨头收集者”的人。这个人喜欢收集各种骨头,比如狗的、牛的,甚至还去坟墓……
骨头收集者有一个容积为V的大袋子,沿途收集骨头时有很多骨头,显然,不同的骨头有不同的价值和不同的体积,现在给定每个骨头沿途的价值,你能计算出骨头收集者能获得的最大总价值吗?

输入

第一行包含一个整数T,表示案例的数量。
接下来是T个案例,每个案例有三行,第一行包含两个整数N,V,(N <= 1000, V <= 1000)表示骨头的数量和他的袋子的容积。第二行包含N个整数,表示每个骨头的价值。第三行包含N个整数,表示每个骨头的体积。

输出

每行一个整数,表示最大的总价值(这个数字将小于2^31)。

测试样例

输入

1
5 10
1 2 3 4 5
5 4 3 2 1

输出

14

解释:

  • 前5个物品价值分别为1, 2, 3, 4, 5,体积分别为5, 4, 3, 2, 1。
  • 最大总价值为14,可以通过选择体积为1、2、3、4的物品实现。

这个问题是一个经典的“0/1背包问题”,可以使用动态规划来解决。我们需要计算每个案例中骨头收集者能够获得的最大总价值。以下是详细的步骤和代码实现。

代码

import java.util.Scanner;
//骨头收集者
public class Main{public static void main(String[] args){Scanner sc = new Scanner(System.in);int k = sc.nextInt();while(k-->0) {int N = sc.nextInt();//骨头的数量int V = sc.nextInt();//背包的容量int[] values = new int[N];//物品的价值int [] volumes = new int[N];//物品的重量for(int i = 0;i<N;i++) {values[i] = sc.nextInt();//为每个物品依次读入价值}for(int i= 0;i<N;i++) {volumes[i] = sc.nextInt();//为每个物品依次读入重量}int result = maxValue(N,V,values,volumes);System.out.println(result);}}private static int maxValue(int N, int V, int[] values, int[] volumes) {//创建一个二维数组,用来表示在前i个物品在容量不超过j的时候可以获得的最大价值int[][] dp = new int[N+1][V+1];for(int i = 1;i<=N;i++) {for(int j = 0;j<=V;j++) {dp[i][j] = dp[i-1][j];if(j>=volumes[i-1]) {dp[i][j] = Math.max(dp[i][j], dp[i - 1][j - volumes[i - 1]] + values[i - 1]);  // 选第i个骨头}}}return dp[N][V];}}

详解

初步思路

通过动态规划解决0/1背包问题,逐步计算每个物品在不同容量下的最大价值。

具体步骤

  1. 输入读取:

    • 首先读取案例数量T。
    • 对于每个案例,读取骨头数量N和背包容量V。
    • 读取每个骨头的价值数组values和体积数组volumes。
  2. 初始化DP表:

    • 创建一个二维数组dp,其中dp[i][j]表示前i个骨头在背包容量不超过j时的最大总价值。
    • 初始化dp数组为0,因为当没有物品或者容量为0时,最大价值为0。
  3. 填充DP表:

    • 遍历所有骨头,从第1个到第N个。
    • 对于每个骨头,从容量0到容量V,逐步更新dp表。
    • 更新规则:
      • 如果不选第i个骨头,dp[i][j] = dp[i-1][j]。
      • 如果选第i个骨头,dp[i][j] = max(dp[i][j], dp[i-1][j-volumes[i-1]] + values[i-1])。
  4. 输出结果:

    • 最后,dp[N][V]即为前N个骨头在容量为V时的最大总价值。
    • 对于每个案例,输出对应的最大总价值。

总结方法

动态规划是一种有效解决0/1背包问题的方法,通过构建和填充dp表,我们可以在多项式时间内求解该问题。此方法的关键在于理解和正确应用状态转移方程:在每一步都决定是否选择当前物品,从而保证最大总价值的累积。

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

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

相关文章

uniapp地图导航

我们只需要给图标加一个点击事件 我这里的数据都是动态的&#xff0c;想测试的朋友可以写固定值 然后跳转之后首先会调到选择软件导航 点击导航之后会显示使用哪个app 最后我们选择之后将会直接跳转到app进行导航

深入理解 EulerDiscreteScheduler 在扩散模型中的应用与实现

在扩散模型中&#xff0c;我们有一个前向过程&#xff08;逐步向数据添加噪声&#xff09;和一个反向过程&#xff08;逐步去除噪声以恢复原始数据&#xff09;。EulerDiscreteScheduler 使用欧拉方法来近似计算这个反向过程的每一步。 具体来说&#xff0c;假设我们从一个完全…

2024.06.12【读书笔记】丨生物信息学与功能基因组学(第十四章 细菌和古细菌基因组 第二部分)【AI测试版】

读书笔记&#xff1a;《生物信息学与功能基因组学》第十四章 - 第二部分 摘要 第二部分深入讨论了基于不同标准的细菌和古细菌的分类方法&#xff0c;包括形态学、基因组大小和排列、生活方式以及与人类疾病的关系。此外&#xff0c;还探讨了基于核糖体RNA序列的分类方法&…

027、工具_redis-benchmark

redis-benchmark可以为Redis做基准性能测试 1.-c -c(clients)选项代表客户端的并发数量(默认是50)。 2.-n -n(num)选项代表客户端请求总量(默认是100000)。 例如redis-benchmark-c100-n20000代表100各个客户端同时请求Redis,一 共执行20000次。 redis-benchmark会…

使用Java获取图片MD5编码的方法详解

在网络应用程序开发中&#xff0c;经常会遇到需要对图片进行处理和管理的情况&#xff0c;其中一项常见的需求是获取图片的MD5编码。MD5编码是一种常用的哈希算法&#xff0c;通过对图片内容进行哈希计算&#xff0c;可以生成唯一的MD5编码&#xff0c;用于校验图片的完整性和唯…

LMDeploy 量化部署

LMDeploy简介 LMDeploy是一个由MMDeploy和MMRazor团队联合开发的工具包&#xff0c;旨在为大型语言模型&#xff08;LLM&#xff09;提供全套的轻量化、部署和服务解决方案。以下是对LMDeploy的简介&#xff0c;采用分点表示和归纳的方式&#xff1a; 核心功能&#xff1a; 高…

Stable Diffusion: ControlNet 插件安装

前面介绍了一些通过代码实现ControlNet进行控制的案例。现在通过Stable Diffusion体验一下更便捷的操作。 Stable Diffusion插件安装办法大致相同。启动Stable Diffusion后&#xff0c;点击最右边的“扩展”&#xff0c;点击“可下载”&#xff0c;点击“加载扩展列表”。 视网…

正大国际期货:小小的钱如何在期货市场翻身?

小小的钱 &#xff0c;莫名喜感→在小小的花园里面哇呀哇呀挖 有可能性&#xff0c;因为有杠杆所以收益大&#xff0c;同时风险亏损起来也快&#xff0c;&#xff0c;所以必须用小亏损换大收益&#xff0c;&#xff0c;比如跌过这个位置就止损退出&#xff08;永远在低点附近买…

【递归、搜索与回溯】综合练习一

综合练习一 1.找出所有子集的异或总和再求和2.全排列 II3.电话号码的字母组合4.括号生成 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.找…

OpenStack是什么?

OpenStack是一个开源的云计算管理平台项目&#xff0c;它是一系列软件开源项目的组合。该项目由美国国家航空航天局&#xff08;NASA&#xff09;和Rackspace合作研发并发起&#xff0c;旨在提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack不仅是一个软…

【stable diffusion】ComfyUI扩展安装以及”127.0.0.1拒绝了我们的连接请求“解决记录

扩展安装 虽然大家都推荐将扩展包直接放到extension文件夹的方式&#xff0c;但我还是推荐直接在sd webui的扩展处下载&#xff0c;酱紫比较好维护一点&#xff0c;我个人感觉。 按照上图顺序点击会出现”URLError: <urlopen error [Errno 11004] getaddrinfo failed>”…

2024 Java 异常—面试常见问题

目录 一、异常的分类 二、throw和throws都是异常处理的关键字&#xff0c;二者区别。 三、try-catch-finally 中&#xff0c;如果 catch 中 return 了&#xff0c;finally 还会执行吗&#xff1f; 四、try-catch-finally 中哪个部分可以省略&#xff1f; 五、常见的 Runti…

反悔贪心,LeetCode 2813. 子序列最大优雅度

一、题目 1、题目描述 给你一个长度为 n 的二维整数数组 items 和一个整数 k 。 items[i] [profiti, categoryi]&#xff0c;其中 profiti 和 categoryi 分别表示第 i 个项目的利润和类别。 现定义 items 的 子序列 的 优雅度 可以用 total_profit distinct_categories2 计算…

.pkl文件保存和读取

#save sim sim.save(G:/simulation.pkl) print()#read sim import pickle with open(G:/simulation.pkl, rb) as f:sim pickle.load(f)

BarTender软件下载附加详细安装教程

BarTender是美国海鸥科技推出的一款优秀的条码打印软件&#xff0c;应用于 WINDOWS95 、 98 、 NT 、 XP 、 2000 、 2003 和 3.1 版本&#xff0c; 产品支持广泛的条形码码制和条形码打印机&#xff0c; 不但支持条形码打印机而且支持激光打印机&#xff0c;还为世界知名品牌条…

C脚本实现用键盘按键控制Wincc某按钮动作

文章目录 前言一、创建Wincc画面并添加变量及按钮二、在“事件”-“键盘”下&#xff0c;编写“按下”和“释放”的C脚本 前言 在某些特定场景下&#xff0c;需要通过电脑键盘控制上位机界面上按钮按下或释放&#xff0c;本文给出了基于C脚本的解决方案。 一、创建Wincc画面并…

Python中Numpy的np.arange

np.arange 是用于创建等差整数序列的函数。其语法如下&#xff1a; np.arange(start, stop, step, dtypeNone) start&#xff1a;序列的起始值&#xff0c;默认为0。 stop&#xff1a;序列的终止值&#xff0c;生成的数组不包括此值。 step&#xff1a;序列中的值之间的步长&a…

Tailwind CSS 响应式设计实战指南

title: Tailwind CSS 响应式设计实战指南 date: 2024/6/13 updated: 2024/6/13 author: cmdragon excerpt: 这篇文章介绍了如何运用Tailwind CSS框架创建响应式网页设计&#xff0c;涵盖博客、电商网站及企业官网的布局实例&#xff0c;包括头部导航、内容区域、侧边栏、页脚…

从零开始手把手Vue3+TypeScript+ElementPlus管理后台项目实战十一(整体布局04之Header及用户注销)

新增Hearder 新增 src/layout/components/PageHeader.vue <template><div class"header-cont"><div><h1><router-link to"/">RealWorld</router-link></h1></div><div><template v-if"is…

北斗三号短报文终端户外应急通信解决方案

北斗三号短报文终端户外应急通信解决方案主要基于我国自主研发的北斗三号全球卫星导航系统&#xff08;BDS-3&#xff09;&#xff0c;为户外应急场景提供高效、稳定的通信服务。以下是对该解决方案的详细阐述&#xff1a; 一、方案概述 北斗三号短报文终端户外应急通信解决方…