动态规划二

LeetCode63不同路径二(动态规划) 算法特点及适用场景该算法基于动态规划思想,针对存在障碍物的网格路径问题进行了合理的状态定义和状态转移方程推导,能够有效地计算出从左上角走到右下角的不同路径数量(考虑障碍物情况)。代码实现上在原 “不同路径” 问题的基础上增加了障碍物的相关判断逻辑,整体依然比较清晰直观,易于理解和维护。适用于各种类似在有障碍的地图、棋盘等场景中进行路径规划或者路径数量统计的问题,只要问题可以抽象成在二维平面上按照特定规则移动并统计路径的情况,都可以尝试运用这种动态规划结合障碍物判断的思路来求解。注意事项及可能遇到的问题。 阅读详情

①  70. 爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶

示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶
class Solution:
    def climbStairs(self, n: int) -> int:
        dp=[0 for _ in range(n)]
        if n==1:
            return 1
        if n==2:
            return 2
        dp[0]=1
        dp[1]=2
        for i in range(2,n):
            dp[i]=dp[i-1]+dp[i-2]
        return dp[-1]
class Solution:
    def climbStairs(self, n: int) -> int:
            if n < 2:
                return 1
            dp = [0] * (n + 1)
            dp[0], dp[1] = 0, 1
            print("dp",dp)
            for i in range(2, n + 1):
                print("i:", i)
                dp[i] = dp[i - 1] + dp[i - 2]
                print("dp", dp)
            return dp[n-1]+dp[n]

 

③ 198. 打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

示例 1:

输入:[1,2,3,1]
输出:4
解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
     偷窃到的最高金额 = 1 + 3 = 4 。

示例 2:

输入:[2,7,9,3,1]
输出:12
解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
     偷窃到的最高金额 = 2 + 9 + 1 = 12 。
class Solution:
    def rob(self, nums: List[int]) -> int:

        # s=0
        # b=0

        # for i in range(0,len(nums),2):
        #     s=s+nums[i]
        # for i in range(1,len(nums),2):
        #     b=b+nums[i]
        # return max(b,s)
        dp=[0 for _ in range(len(nums))]
        dp[0]=nums[0]
        if len(nums)>=2:
            dp[1]=max(dp[0],nums[1])
        for i in range(2,len(nums)):
            dp[i]=max(dp[i-2]+nums[i],dp[i-1])
        return max(dp)





      #偷第i个房屋时的最大值
        if len(nums)==0:
            return 0
        if len(nums)<=2:
            return max(nums)
        n=len(nums)
        dp=[0]*n
        dp[0],dp[1]=nums[0],nums[1]
        dp[2]=max(dp[0]+nums[2],dp[1])
    
        for i in range(3,len(nums)):
            dp[i]=max(dp[i-2]+nums[i],dp[i-3]+nums[i])
        return max(dp)       

④ 213. 打家劫舍 II

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。

给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。

示例 1:

输入:nums = [2,3,2]
输出:3
解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。
示例 2:

输入:nums = [1,2,3,1]
输出:4
解释:你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。
     偷窃到的最高金额 = 1 + 3 = 4 。
示例 3:

输入:nums = [0]
输出:0

class Solution:
    def rob(self, nums: List[int]) -> int:
        def robRange(start: int, end: int) -> int:
            first = nums[start]
            second = max(nums[start], nums[start + 1])
            for i in range(start + 2, end + 1):
                first, second = second, max(first + nums[i], second)
            return second
        
        length = len(nums)
        if length == 1:
            return nums[0]
        elif length == 2:
            return max(nums[0], nums[1])
        else:
            return max(robRange(0, length - 2), robRange(1, length - 1))


class Solution:
    def rob(self, nums: List[int]) -> int:
        



        # def f(start,end,nums):
        #     dp=[0 for _ in range(len(nums)-1)]
        #     dp[0]=nums[start]
        #     dp[1]=max(dp[0],nums[start+1])
        #     for i in range(2,n-1):
        #         dp[i]=max(dp[i-2]+nums[start+i],dp[i-1])
        #     return dp[-1]    
        # n=len(nums)
        # if n<4:
        #     return max(nums)
        # else:
        #     return max(f(0,n-1,nums),f(1,n,nums))   
      

        n=len(nums)
        if n<4:
            return max(nums)
        dp=[0 for _ in range(n-1)]
        dp1=[0 for _ in range(n-1)]
        dp[0],dp1[0]=nums[0],nums[1]
        if n>=2:
            dp[1]=max(dp[0],nums[1])
            dp1[1]=max(dp1[0],nums[2])
        for i in range(2,n-1):
            dp[i]=max(dp[i-2]+nums[i],dp[i-1])
        for i in range(2, n-1 ):
            dp1[i] = max(dp1[i - 2] + nums[i+1], dp1[i - 1])
            
        return max(dp[-1],dp1[-1])







输入:4
输出:3
解释:F(4) = F(3) + F(2) = 2 + 1 = 3

1137. 第 N 个泰波那契数

泰波那契序列 Tn 定义如下: 

T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2

给你整数 n,请返回第 n 个泰波那契数 Tn 的值。

示例 1:

输入:n = 4
输出:4
解释:
T_3 = 0 + 1 + 1 = 2
T_4 = 1 + 1 + 2 = 4

示例 2:

输入:n = 25
输出:1389537
class Solution:
    def tribonacci(self, n: int) -> int:
        if n==0:
            return 0
        if n==1 or n==2:
            return 1
        t0,t1,t2=0,1,1
        for i in range(3,n+1):
            tmp=t2
            t2=t0+t1+t2
            t0=t1
            t1=tmp
        return t2

⑤ 

740. 删除并获得点数

给你一个整数数组 nums ,你可以对它进行一些操作。

每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。

开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。

示例 1:

输入:nums = [3,4,2]
输出:6
解释:
删除 4 获得 4 个点数,因此 3 也被删除。
之后,删除 2 获得 2 个点数。总共获得 6 个点数。

示例 2:

输入:nums = [2,2,3,3,3,4]
输出:9
解释:
删除 3 获得 3 个点数,接着要删除两个 2 和 4 。
之后,再次删除 3 获得 3 个点数,再次删除 3 获得 3 个点数。
总共获得 9 个点数。
class Solution:
    def deleteAndEarn(self, nums: List[int]) -> int:
        maxi=max(nums)
        alist=[0] * (maxi+1)
        for i in nums:
            alist[i]+=i

        def rob(alist):
            if len(alist)<3:
                return max(alist)

            dp=[0 for _ in range(len(alist))]  
            dp[0]=alist[0]
            dp[1]=max(dp[0],alist[1])  

            for i in range(2,len(alist)):
                dp[i]=max(dp[i-1],dp[i-2]+alist[i])   
            return dp[-1]     
        return rob(alist)   

⑥55. 跳跃游戏

难度中等1258

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标。

示例 1:

输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。

示例 2:

输入:nums = [3,2,1,0,4]
输出:false
解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。
class Solution:
    def canJump(self, nums: List[int]) -> bool:
       
        cur=0  
        for i in range(len(nums)):
            if i>cur:
                return False
            cur =max(cur,i+nums[i]) 
            if cur>=len(nums):
                break
        return True        



class Solution:
    def canJump(self, nums) :
        max_i = 0       #初始化当前能到达最远的位置
        for i, jump in enumerate(nums):   #i为当前位置,jump是当前位置的跳数
            if max_i>=i and i+jump>max_i:  #如果当前位置能到达,并且当前位置+跳数>最远位置  
                max_i = i+jump  #更新最远能到达位置
        return max_i>=i

⑦45. 跳跃游戏 II

难度中等1051

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

假设你总是可以到达数组的最后一个位置。

示例 1:

输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
     从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

示例 2:

输入: [2,3,0,1,4]
输出: 2
class Solution:
    def jump(self, nums: List[int]) -> int:
        
        new_max,maxi,step=0,0,0
        for i in range(len(nums)-1):
            new_max=max(new_max,i+nums[i])
            if i==maxi:
                step+=1
                maxi=new_max
                if maxi>=len(nums)-1:
                    break          
        return step 



当前所能达到的最远位置 end,下一步所能跳到的最远位置 max_pos,最少跳跃次数 setps。


class Solution:
    def jump(self, nums: List[int]) -> int:
        end, max_pos = 0, 0
        steps = 0
        for i in range(len(nums) - 1):
            max_pos = max(max_pos, nums[i] + i)
            if i == end:
                end = max_pos
                steps += 1
        return steps

 

⑨

918. 环形子数组的最大和

难度中等171

给定一个由整数数组 A 表示的环形数组 C,求 C 的非空子数组的最大可能和。

在此处,环形数组意味着数组的末端将会与开头相连呈环状。(形式上,当0 <= i < A.length 时 C[i] = A[i],且当 i >= 0 时 C[i+A.length] = C[i])

此外,子数组最多只能包含固定缓冲区 A 中的每个元素一次。(形式上,对于子数组 C[i], C[i+1], ..., C[j],不存在 i <= k1, k2 <= j 其中 k1 % A.length = k2 % A.length)

示例 1:

输入:[1,-2,3,-2]
输出:3
解释:从子数组 [3] 得到最大和 3

示例 2:

输入:[5,-3,5]
输出:10
解释:从子数组 [5,5] 得到最大和 5 + 5 = 10

参考:. - 力扣(LeetCode)

解题思路
参数定义
pre:以当前i结尾的最大子数组的和
max_/min_:数组中子数组和的最大最小值
思路
根据上图,本题可以分为两种情况讨论
无环:最大和子数组不包含首尾元素
有环:最大和子数组包含首尾元素
无环状态下,即为53. 最大子序和
有环状态下,要使得两端之和最大,必须让中间的子数组最小,即最后有环情况下的最大子数组和为:sum(nums)-min_
复杂度分析
时间复杂度:O(nn)
空间复杂度:O(11)


class Solution:
    def maxSubarraySumCircular(self, nums: List[int]) -> int:
        n=len(nums)   
        max_=float('-inf')
        #无环 
        pre=0
        for i in range(n):
            pre=max(0,pre)+nums[i]
            max_=max(max_,pre)
        # 如果最子数组和小于0,说明数组中全为负数,返回最大负数即可
        if max_<0:return max_
        #有环
        pre=0
        min_=float('inf')
        for i in range(n):
            pre=min(0,pre)+nums[i]
            min_=min(min_,pre)
        
        return max(max_,sum(nums)-min_)

Python+Tableau 全流程数据分析实战:从数据清洗到商业洞察可视化 本文通过Python+Tableau完整演示电商销售数据分析流程。首先使用Python进行数据清洗(缺失值处理、异常值过滤等)和探索性分析(商品类别、时间趋势等),然后导入Tableau创建交互式可视化仪表盘。分析发现电子产品销售额最高但利润率低,美妆类利润率最优,东部地区销售表现最好。最终提出优化供应链、加强美妆推广等商业建议,展示了Python数据处理与Tableau可视化的高效配合。所有代码可直接运行,适合数据分析初学者和从业者实战参考。 阅读详情

相关推荐

【电路设计实战】BUCK降压电路:从原理到PCB布局的降噪与效率优化

本文深入剖析了BUCK降压电路的工作原理,并针对其固有的开关噪声问题,提供了从核心元件选型到PCB布局的全面优化方案。文章重点探讨了电感、电容等关键元件的选型要点,强调了低ESR电容和肖特基二极管的重要性,并详细阐述了如何通过最小化功率回路、保护敏感信号线等PCB布局实战技巧,有效抑制噪声、提升效率与稳定性。

weixin_29304021的博客 223

动态规划的应用(算法题题解)

动态规划解决打家劫舍系列问题 废话少说,直接看题 #### [198. 打家劫舍](https://leetcode-cn.com/problems/house-robber/) 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 示例 1: 输入:[1

xdbzdgx的博客 271

地下水热耦合模拟FEFLOW建模

2.3 依据讲解内容,练习构建地下水数值模型(例二),学会各种源汇项、边界条件、时间序列、节点参数的添加及模拟结果的导出。对于真实模型,学习如何建立概念模型、数学模型,练习模型的各种参数和源汇项输入,进行溶质运移、水热模拟。3.通过多种实践案例应用,掌握实践工作中常见项目的模型搭建及特殊问题处理方法。4.1学习水热模型抽灌模式,网格剖分、边界条件、初始温度场赋值。3.3练习模型的各种参数和源汇项输入,进行水流和溶质运移模拟。2.掌握水热耦合的模拟方法及典型项目应用问题处理。2.4根据模拟结果,

weixin_55561616的博客 964

C++递推经典案例No.3——爬楼梯的最小代价

数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。,而对于本题,由于一次性可以跳1个或者2个,所以可以转化为:从前一个和前两个到当前位置,哪个所花费的体力值。,如果想要爬到最顶层(也就是遍历到下标越界的地步)。例如,想到达下标为2的6,要么从0开始,要么从1开始,相当于就是。

软工科班,擅长Matlab、C++、微信小程序开发 880

GD32单片机引脚复用指南:如何让JTAG接口的PA15/PB3发挥第二功能?

本文详细介绍了GD32F103Cx系列单片机如何通过AFIO模块进行引脚复用,特别是将默认用于JTAG调试接口的PA15、PB3等引脚释放为普通IO或复用功能引脚。文章从原理出发,结合代码实践,讲解了如何配置调试端口重映射,将JTAG引脚安全地转换为GPIO或定时器通道,并提供了常见问题排查与最佳实践,帮助开发者高效利用有限的引脚资源。

nept的博客 809

Halcon实战:5分钟搞定线序颜色检测(附完整代码解析)

本文详细介绍了如何使用Halcon在5分钟内实现工业级线序颜色检测的高效方案。通过机器视觉技术,结合实战项目经验,提供完整的代码解析和优化技巧,帮助开发者快速构建鲁棒性强、准确率高的检测系统,适用于电子制造和汽车线束等行业。

weixin_29098367的博客 441

【剑指 Offer II】 088. 爬楼梯的最少成本

题目: 数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。 每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。 请找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。 示例 1: 输入:cost = [10, 15, 20] 输出:15 解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。 示例 2: 输入:cost = [1,

漆黑梦工厂 453

零基础快速学习 ABAP 读者意见反馈和下一步写作计划表

大家在学习教程过程中,如果有任何关于 SAP ABAP 开发方面想了解的内容,可以直接在教程各篇文章下评论留言,我会将大家的意见统一汇总到下面的表格,作为我更新教程的内容参考来源之一。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4273

【算法修炼道路】使用最小花费爬楼梯

数组的每个索引作为一个阶梯,第i个阶梯对应着一个非负数的体力花费值cost[i](索引从0开始)。 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。 您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。 示例1: 输入: cost = [10, 15, 20] 输出: 15 解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。 示例 2: 输入: cost = [1, 100, ...

Ck_Max的博客 325

Debezium报错处理系列之二十八: Expiring 1 record(s) for test-ts-0:120001 ms has passed since batch creation

Debezium报错处理系列之二十八: Expiring 1 record(s) for test-ts-0:120001 ms has passed since batch creation

zhengzaifeidelushang的博客 3290

摆脱英文束缚!群晖Transmission4.0.4全新中文界面攻略

在群晖安装完官方Transmission4.0.4套件后,界面是英文状态的,不太好用。但是按照网上分享的原来4.0以前版本的方法更新UI又失败,所以自己搞了下成功了,分享给需要的朋友。

XiaoqiangClub的博客 5217

Leetcode 使用最小花费爬楼梯

746.使用最小花费爬楼梯 数组的每个索引做为一个阶梯,第i个阶梯对应着一个非负数的体力花费值cost[i](索引从0开始)。 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。 您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。 示例1: 输入: cost = [10, 15, 20]...

weixin_41514525的博客 240

C#联合Halcon机器视觉框架源码

本软件参考EV开发,共用模块,基于WPF+Halcon,是非常不错的学习框架,需要什么功能可以自己添加,插件式开发非常方便。

Z's Palace 4829

力扣hot100二刷——动态规划

第二次刷题不在idea写代码,而是直接在leetcode网站上写,“逼”自己掌握常用的函数。

weixin_49426115的博客 974

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

力扣hot100二刷——多维动态规划、技巧(完结)

第二次刷题不在idea写代码,而是直接在leetcode网站上写,“逼”自己掌握常用的函数。

weixin_49426115的博客 447

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【动态规划-BM79 打家劫舍(二)】

【动态规划-BM79 打家劫舍(二)】

Youkiup的博客 450

动态规划(二)

大佬的第二个视频代码 视频链接 题目一: 题目描述: 在一个数组中(只包含正整数)找出一组不相邻的数,使得其和最大 解题思路: 关键思想: 每个数有选和不选两种选择。按前i个数的最优解来说,如果选这个数,则这个数的前一个数就不能选,因此此时的最优解就是前i-2个数的最优解加上当前的数字;如果不选这个数,则最优解就是前i-1个数的最优解。因此前i个数的最优解,就是这两个选择中的最优解(即最大值)。 起点: 当i=0时,最优解就是当前这个数;当i=1时,最优解就是前两个数中的最大值。 测试数据: 7 1 2 4

lmmmmmmmmmmmmmmm的博客 162

算法 - 动态规划(二)

动态规划算法的基本思想是:将待求解的问题分解成若干个相互联系的子问题,先求解子问题, 然后从这些子问题的解得到原问题的解;对于重复出现的子问题,只在第一次遇到的时候对它进行求解,并把答案保存起来,让以后再次遇到时直接引用答案,不必重新求解。动态规划算法将问题的解决方案视为一系列决策的结果。题目描述:假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益。 1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能

zt_9773的博客 1033

动态规划-背包问题(二)

该题是lintcode上的算法题,该题的解题思路是按照九章侯老师给的方法去实现的。

天使之翼 672

二刷代码随想录——动态规划day38

一个本硕双非的小菜鸡,备战24年秋招,计划二刷完卡子哥的刷题计划,加油!

qq_43264167的博客 482

动态规划 算法(二)

摘要 LeetCode 53题要求寻找数组中连续子数组的最大和。采用动态规划方法,定义dp[i]为以nums[i]结尾的最大子数组和,通过状态转移方程dp[i] = max(nums[i], dp[i-1]+nums[i])求解,空间优化后只需O(1)空间。152题扩展为求最大乘积子数组,需同时维护最大和最小乘积数组,处理负负得正的情况。典型示例中,数组[-2,1,-3,4,-1,2,1,-5,4]的最大子数组和为6,对应子数组[4,-1,2,1]。两题均采用动态规划,时间复杂度O(n),核心在于状态转移逻

红血哥 1572

动态规划小总结(二)

动态规划题目的第二弹

m0_68519894的博客 519

每日一LeetCode:打家劫舍(二)(动态规划)

你是一个经验丰富的小偷,准备偷沿湖的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家,就不能再偷第二家,如果偷了第二家,那么就不能偷第一家和第三家。数据范围:数组长度满足 1≤n≤2×105 1≤n≤2×105 ,数组中每个值满足 1≤nums[i]≤5000 1≤nums[i]≤5000。给定一个长度为n的整数数组nums,数组中的元素表示每个房间存有的现金数额,请你计算在不被发现的前提下最多的偷窃金额。

三木的博客 350

二刷代码随想录——动态规划day47

一个本硕双非的小菜鸡,备战24年秋招,计划二刷完卡子哥的刷题计划,加油!

qq_43264167的博客 550

算法实验二 动态规划

动态规划1 实验题目:减肥的小K2 题目描述: 小K是个苦命的孩子,他的师傅为了多赚钱,以减肥为理由,让他去采药,并说不完成不能吃饭。野地里有许多不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。要求在规定的时间t里,采到的草药的总价值最大。 输入要求: 第一行有2个整数T(1≤T≤1000)和M(1≤M≤100),一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。 接下来的M行每行包括两个在1到100之间包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。 输

weixin_45816954的博客 2789

实验二 动态规划

实验二 动态规划 一、 实验目的及任务 1、 掌握动态规划算法的基本步骤:找出最优解的性质,并刻画其结构特征;递归地定义最优值;以自底向上的方式计算出最优值;根据计算最优值时得到的信息,构造最优解。 2、 设计并实现矩阵连乘的算法,掌握动态规划算法。 二、 实验环境 c++或java或Turbo c 三、 问题描述 给定n个矩阵,其中Ai与Ai+1是可乘的,i=1,2…,n。 矩阵 Ai 的维度为 P i-1´ Pi,如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要

zlhnp的博客 220

代码随想录二刷|动态规划3

动态规划数组的含义 dp[i]递推公式动态规划数组的初始化确定遍历顺序手动模拟验证。

2301_79647020的博客 1154
上一篇: shell 练习
下一篇: 动态规划③
one_zero_one
博客等级 码龄7年 30粉丝 141原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值