代码随想录算法训练营第三十一天丨15.1钢条切割、LCR 126. 斐波那契数/习题15.1-5、53. 最大子数组和

本文主要是介绍代码随想录算法训练营第三十一天丨15.1钢条切割、LCR 126. 斐波那契数/习题15.1-5、53. 最大子数组和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 15.1钢条切割

假设你有一根长度为n英寸的钢条和一个价格表,表中列出了不同长度的钢条的售价。你可以选择不同的方式切割这根钢条,然后将切割后的各段钢条按照价格表出售。目标是确定如何切割钢条以使得销售收益最大化。

问题的输入是一个价格表P[i],其中i=1,2,...,n,表示长度为i英寸的钢条的价格,以及钢条的总长度n。问题的输出是最大收益R[n]以及达到这个最大收益时各段钢条的长度。

解决这个问题的动态规划方法涉及将问题分解为更小的子问题,然后逐步构建解决原问题的方法。具体来说,动态规划算法会计算出对于每个长度i(1 <= i <= n),切割钢条所能得到的最大收益R[i]。这是通过比较不切割钢条(即直接出售整根钢条)和所有可能的切割方案(即将钢条切割为两部分,并递归地计算这两部分的最大收益)的收益来实现的。

算法的关键是避免重复计算相同子问题的解,这通常通过两种方式实现:

  1. 自顶向下的备忘录方法:这种方法首先尝试解决最大规模的问题,即求R[n],并在递归过程中,将所有小于n的R[i]的值存储在一个数组中,以避免重复计算。
  2. 自底向上的方法:这种方法从最小的子问题开始,即R[1],然后逐步计算所有R[i]直到R[n]。这种方法利用了子问题的解依赖于更小的子问题的解这一事实,通过迭代计算而不是递归来避免重复计算。

自顶向下的递归方法:

def cut_rod(p, n):if n == 0:return 0q = -float('inf')for i in range(1, n + 1):q = max(q, p[i] + cut_rod(p, n - i))return q

带备忘的自顶向下方法:

def memoized_cut_rod(p, n):# 初始化备忘录,所有值设为 None 表示未计算r = [None] * (n + 1)def cut_rod_aux(n):"""辅助递归函数,使用备忘录避免重复计算。:param n: 当前考虑的钢条长度。:return: 长度为 n 的钢条的最大收益。"""if r[n] is not None:return r[n]if n == 0:q = 0else:q = -float('inf')for i in range(1, n + 1):q = max(q, p[i] + cut_rod_aux(n - i))r[n] = qreturn qreturn cut_rod_aux(n)

自底向上的方法:

def bottom_up_cut_rod(p, n):# 初始化收益数组r,r[i] 存储长度为 i 的钢条的最大收益r = [0] * (n + 1)# 从最小子问题开始,逐步计算所有长度的最大收益for j in range(1, n + 1):q = -float('inf')# 对于每个长度j,尝试所有可能的第一段切割长度ifor i in range(1, j + 1):q = max(q, p[i] + r[j - i])r[j] = qreturn r[n]

LCR 126. 斐波那契数/习题15.1-5

入门级别的动态规划题目。

类似钢条切割,使用dp数组:

class Solution:def fib(self, n: int) -> int:if n == 0: return 0r = [0] * (n + 1)r[1] = 1for i in range(2, n + 1):r[i] = r[i - 1] + r[i - 2]return r[n] % 1000000007

空间复杂度是O(1)解法:

def fib(n):"""计算斐波那契数列的第n个数,使用动态规划(自底向上)。:param n: 斐波那契数列的索引:return: 第n个斐波那契数"""if n <= 1:return n# 初始化存储前两个斐波那契数的变量prev, curr = 0, 1for i in range(2, n + 1):prev, curr = curr, prev + currreturn curr

53. 最大子数组和

class Solution:def maxSubArray(self, nums: List[int]) -> int:current_max, global_max = nums[0], nums[0]for num in nums[1:]:current_max = max(num, current_max + num)global_max = max(current_max, global_max)return global_max

好像懂了,又好像没懂,以后系统刷到动态规划再说。

这篇关于代码随想录算法训练营第三十一天丨15.1钢条切割、LCR 126. 斐波那契数/习题15.1-5、53. 最大子数组和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/697174

相关文章

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill