算法打卡day38

今日任务:

1)完全背包理论基础(卡码网52. 携带研究材料)

2)518.零钱兑换II

3)377. 组合总和 Ⅳ

4)复习day13

完全背包理论基础(卡码网52. 携带研究材料)

题目链接:52. 携带研究材料(第七期模拟笔试) (kamacoder.com)

题目描述
小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等,它们各自占据不同的重量,并且具有不同的价值。
小明的行李箱所能承担的总重量为 N,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料可以选择无数次,并且可以重复选择。输入描述
第一行包含两个整数,N,V,分别表示研究材料的种类和行李空间
接下来包含 N 行,每行两个整数 wi 和 vi,代表第 i 种研究材料的重量和价值输出描述
输出一个整数,表示最大价值。输入示例
4 5
1 2
2 4
3 4
4 5输出示例
10提示信息
第一种材料选择五次,可以达到最大值。数据范围:
1 <= N <= 10000;
1 <= V <= 10000;
1 <= wi, vi <= 10^9.

文章讲解:代码随想录 (programmercarl.com)

视频讲解:带你学透完全背包问题! 和 01背包有什么差别?遍历顺序上有什么讲究?哔哩哔哩bilibili

思路:

这是一个典型的完全背包问题,与传统的0-1背包问题略有不同,因为每种研究材料可以选择无数次,并且可以重复选择。这种情况下,我们可以采用动态规划来解决。

01背包问题不能重复,所以我们用一维滚动数组时都是采用从后往前遍历,为了避免重复

而现在我们完全背包问题可以重复,所以我们在遍历物品时从前往后面遍历

  1. 初始化动态规划数组: 创建一个一维动态规划数组 dp,其长度为 V+1,并将所有元素初始化为0。这里 dp[i] 表示在背包容量为 i 时能够获得的最大价值。

  2. 遍历研究材料: 对于每一种研究材料,我们可以选择将其放入背包中,也可以选择不放入。

  3. 动态规划更新: 遍历研究材料时,对于每一种材料,我们需要更新动态规划数组。具体地,我们从容量为 wi 的背包开始遍历,逐步向上更新动态规划数组中的值。状态转移方程为:dp[i] = max(dp[i], dp[i - wi] + vi),表示在容量为 i 的背包中,我们可以选择不放入当前材料,也可以选择放入当前材料,取两者中的最大值。

  4. 返回结果: 最后返回动态规划数组中的最大值,即为可以获得的最大价值。

输入示例

3 4

1 15

3 20

4 30 

输出示例 60

def test_CompletePack(weight, value, bagweight):# 创建一维数组用于存储当前背包容量下的最大价值dp = [0] * (bagweight + 1)# 遍历每种研究材料for i in range(len(weight)):# 遍历背包容量for j in range(weight[i], bagweight + 1):# 如果当前背包容量 j 大于等于当前物品的重量 weight[i],# 则可以选择放入当前物品,比较放入当前物品与不放入当前物品的价值大小,取较大者更新 dp[j]dp[j] = max(dp[j], value[i] + dp[j - weight[i]])# 返回能够携带的研究材料的最大价值return dp[-1]if __name__ == "__main__":# 获取研究材料的种类 N 和小明的行李空间 NN, bagweight = map(int, input().split())weight = []value = []# 获取每种研究材料的空间和价值for _ in range(N):# 采集每种研究材料的重量和价值wi, vi = map(int, input().split())# 将重量和价值组成的列表添加到材料列表中weight.append(wi)value.append(vi)# 调用函数计算最大价值并输出结果result = test_CompletePack(weight, value, bagweight)print(result)

518.零钱兑换II

题目链接:518. 零钱兑换 II - 力扣(LeetCode)

给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:
输入: amount = 5, coins = [1, 2, 5]
输出: 4
解释: 有四种方式可以凑成总金额:
5=5
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1示例 2:
输入: amount = 3, coins = [2]
输出: 0
解释: 只用面额2的硬币不能凑成总金额3。示例 3:
输入: amount = 10, coins = [10]
输出: 1注意,你可以假设:
0 <= amount (总金额) <= 5000
1 <= coin (硬币面额) <= 5000
硬币种类不超过 500 种
结果符合 32 位符号整数

文章讲解:代码随想录 (programmercarl.com)

视频讲解:动态规划之完全背包,装满背包有多少种方法?组合与排列有讲究!| LeetCode:518.零钱兑换II哔哩哔哩bilibili

思路:

  • 使用动态规划来解决问题,其中 dp[i] 表示凑成总金额 i 的硬币组合数。
  • 初始化 dp 列表,将 dp[0] 置为 1,表示凑成金额为 0 的组合只有一种,即什么也不选。
  • 遍历硬币列表 coins,对于每个硬币面额 coin,从 coin 到 amount 进行遍历,更新 dp[j]。

class Solution:def change(self, amount: int, coins: List[int]) -> int:dp = [0]*(amount+1)dp[0] = 1# 遍历物品# print(dp)for coin in coins:# 遍历背包for j in range(coin, amount+1):dp[j] = dp[j] + dp[j-coin]# print(dp)return dp[-1]

377. 组合总和 Ⅳ

题目链接:377. 组合总和 Ⅳ - 力扣(LeetCode)

难度:中等
给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。示例:
nums = [1, 2, 3]
target = 4
所有可能的组合为: (1, 1, 1, 1) (1, 1, 2) (1, 2, 1) (1, 3) (2, 1, 1) (2, 2) (3, 1)请注意,顺序不同的序列被视作不同的组合。
因此输出为 7。

文章讲解:代码随想录 (programmercarl.com)

视频讲解:动态规划之完全背包,装满背包有几种方法?求排列数?| LeetCode:377.组合总和IV哔哩哔哩bilibili

思路:

本题题目描述说是求组合,但又说是可以元素相同顺序不同的组合算两个组合,其实就是求排列!

弄清什么是组合,什么是排列很重要。

组合不强调顺序,(1,5)和(5,1)是同一个组合。

排列强调顺序,(1,5)和(5,1)是两个不同的排列。

上一题518. 零钱兑换 II - 力扣(LeetCode)就是求组合

而本题是求排列

如果求组合数就是外层for循环遍历物品,内层for遍历背包

如果求排列数就是外层for遍历背包,内层for循环遍历物品

  • 使用动态规划来解决问题,其中 dp[i] 表示和为 i 的组合个数。
  • 初始化 dp 列表,将 dp[0] 置为 1,表示和为 0 的组合只有一种,即什么也不选。
  • 遍历目标值 j 从 1 到 target,对于每个目标值 j,遍历数组 nums 中的每个数 num,更新 dp[j]

先更新第0列

更新第1列

更新第2列

更新第3列

更新第4列

最终状态

class Solution:def combinationSum4(self, nums: List[int], target: int) -> int:dp = [0]*(target+1)dp[0] = 1# 遍历背包print(dp)for j in range(1, target + 1):# 遍历物品for num in nums:# 当背包容量大于等于当前物品重量时,更新组合总数if j>=num:dp[j] = dp[j] + dp[j-num]print(dp)# 返回背包容量为target时的组合总数return dp[-1]

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

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

相关文章

使用LangChain和GPT-4,创建Pandas DataFrame智能体

大家好&#xff0c;数据分析和数据处理是数据科学领域每天都在进行的基本任务。高效和快速的数据转换对于提取有意义的见解和基于数据做出明智决策至关重要。其中最受欢迎的工具之一是Python库Pandas&#xff0c;它提供了一个功能强大的DataFrame工具&#xff0c;使用灵活直观的…

基于51单片机土壤湿度检测及自动浇花系统

基于51单片机土壤湿度检测及自动浇花 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.LCD1602实时显示湿度、湿度上下限&#xff1b; 2.可用按键设置湿度、湿度上下限&#xff1b; 3.当湿度低于下限…

分类预测 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机数据…

搭建电商供应链需要用到哪些电商接口?||主流电商API接口解说

搭建供应链系统时&#xff0c;您可能需要与电商平台进行集成&#xff0c;以实现订单管理、库存同步、物流跟踪等功能。以下是一些常见的电商接口&#xff0c;可以帮助您构建供应链系统&#xff1a; 1. **淘宝开放平台接口**&#xff1a;淘宝开放平台提供了丰富的接口&#xff…

4399下架了的flash游戏 网盘自提取

下载好游戏后&#xff0c;需要使用flash进行打开&#xff0c;直接拖动游戏文件到flash文件&#xff0c;即可用flash快捷打开。 flash下载 百度网盘链接&#xff1a;https://pan.baidu.com/s/1KUz4ymg0SS7wFGH54hdE3A?pwdnisj 提取码&#xff1a;nisj 一、幻想纹章 不太行了…

Node.JS后端开发笔记整理(简洁版)

前端 1. 开发环境和技术栈 开发工具&#xff1a;Visual Studio CodeNode.js版本&#xff1a;18.19.0&#xff08;建议保持在18&#xff09;包管理器&#xff1a;npm前端框架&#xff1a;Vue3.4脚本语言&#xff1a;TypeScript构建工具&#xff1a;Vite后端框架&#xff1a;Ex…

ubuntu设置扩充swap交换空间

Swap是指Linux系统中的交换分区,类似于Windows的虚拟内存,当内存不足的时候,把一部分硬盘空间虚拟成内存来使用,从而解决内存不足的问题。交换分区,它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行! …

Golang基础-13

Go语言基础 介绍 并发 channel goroutine 互斥锁 读写锁 原子操作 select 超时处理 sync包 runtime包 介绍 本文介绍Go语言中 channel、goroutine、互斥锁、读写锁、原子操作、select、超时处理、sync包、runtime包等相关知识。 并发 进程是是最小的资源管理单元…

异步FIFO约束set_max_delay

1.最大延迟set_max_delay set_max_delay [-datapath_only] -from [ node_list] -to [node_list] delay_value 在Set Max Delay约束中使用-datapath_only选项时&#xff0c;它指示综合工具在优化设计时仅考虑数据通路的延迟&#xff0c;而不考虑控制逻辑的延迟。 关于最大最小…

L1正则化的数学公式

L1正则化是机器学习和统计学中常用的正则化技术&#xff0c;用于控制模型的复杂度并防止过拟合。它们的数学表达如下&#xff1a; L1正则化&#xff08;也称为Lasso正则化&#xff09;&#xff1a;在损失函数中添加模型参数的绝对值之和作为正则化项。其数学公式如下所示&…

利用地图资源工具让Sentinel-2自动生成NDVI\EVI

新版地图资源工具已经能自动计算EVI了&#xff0c;也就是现在工具可以自动计算NDVI、EVI及做哨兵L1C数据的自动预处理&#xff01;只要勾选如下选项后数据下载的同时会自动生成NDVI、EVI&#xff01; 归一化差异植被指数 (NDVI) 由于植被在近红外波段处有较强的反射&#…

Training - PyTorch Lightning 的 Horovod 策略实践 (all_gather)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/137686312 在 PyTorch Lightning 中使用 Horovod 策略&#xff0c;可以在多个 GPU 上并行训练模型。Horovod 是分布式训练框架&#xff…

Oladance、南卡、漫步者开放式耳机好不好用?3大当红明星产品测评PK

​在音频市场中&#xff0c;开放式耳机以其创新设计和卓越听感赢得了一定的关注。然而&#xff0c;也存在一些产品质量和音质不尽人意&#xff0c;甚至可能影响用户听力安全。作为一名专业的音频设备评测师&#xff0c;我建议用户在选择开放式耳机时&#xff0c;应优先选择那些…

《R语言与农业数据统计分析及建模》学习——控制流

1、控制流的概念和作用 控制流是指根据循环或条件来控制程序的执行顺序和逻辑。 2、循环语句 循环语句允许程序重复执行特定的代码块&#xff0c;知道满足特定条件。 在R语言中&#xff0c;常见的循环语句有for、while和repeat。 # for循环用于在已知次数的情况下重复执行代码…

磁盘的管理

会在linux中使用硬盘 分区 格式化&#xff08;重新安装文件系统&#xff09; 挂载 硬盘的分类 1.机械硬盘 2.固态硬盘 硬盘的数据结构 扇区&#xff1a;盘片被分为多个扇形区域&#xff0c;每个扇区存放512字节的 数据 &#xff08;扇区越多容量越大&#xff09; 存放数据的…

2024.4.13 Python 爬虫复习day01

目录 day01_HTTP协议HTML页面web服务器 各类名词解释 URL统一资源定位符 HTTP协议 HTML页面 知识点: 第一个页面 标题标签和图片标签 注册页面 登录页面 WEB服务器 安装fastapi和uvicorn 原始命令方式 镜像源命令方式 工具方式 快速搭建web服务器 知识点: 示例…

openGauss学习笔记-266 openGauss性能调优-TPCC性能调优测试指导-文件系统配置

文章目录 openGauss学习笔记-266 openGauss性能调优-TPCC性能调优测试指导-文件系统配置266.1 查看当前数据盘的文件系统类型266.2 对于需要修改的磁盘&#xff0c;备份所需的数据至其他磁盘或其他服务器266.3 格式化磁盘为xfs文件系统266.4 执行**步骤一** openGauss学习笔记-…

《Kubernetes部署篇:基于Kylin V10+ARM架构CPU+外部etcd使用containerd部署K8S 1.26.15容器版集群(多主多从)》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;企业级K8s集群运维实战 1、在当前实验环境中安装K8S1.25.14版本&#xff0c;出现了一个问题&#xff0c;就是在pod中访问百度网站&#xff0c;大…

Mysql嵌套查询太简单了

1、子查询的分类 不相关查询&#xff1a; 子查询能独立执行 相关查询&#xff1a; 子查询不能独立运行 相关查询的执行顺序&#xff1a; 首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询, 若WHERE子句返回值为真&#xff0c;则取此元组放入结果…

maven3.9+下载安装

maven介绍 Maven 是一个项目管理和理解工具&#xff0c;它基于项目对象模型&#xff08;POM&#xff09;概念。Maven 可以帮助开发者定义项目结构、依赖关系、构建过程以及其他任务。它主要用于 Java 项目&#xff0c;但也可以用于其他类型的项目。Maven 的主要目标是简化构建…