美文网首页
02-16:动态规划题总结

02-16:动态规划题总结

作者: 是黄小胖呀 | 来源:发表于2021-02-16 17:42 被阅读0次

1、动态规划解除数博弈

1025. 除数博弈

代码如下:

class Solution:

    def divisorGame(self, N: int) -> bool:

        if N==1:

           return False

        if N==2:

            return True

        if N==3:

            return False

        d=[0]*(N)

        d[0]=False

        for i in range(1,N):

            d[i]=bool(1-d[i-1])

        return d[N-1]

2、不连续求总和,同一个问题和解法

(1)面试题 17.16. 按摩师

代码如下:

class Solution:

    def massage(self, nums: List[int]) -> int:

        k=len(nums)

        if k==0:

            return 0

        if k==1:

            return nums[0]

        if k==2:

            return max(nums[0],nums[1])

        d=[0]*k

        d[0]=nums[0]

        d[1]=max(nums[0],nums[1])

        for i in range(2,k):

            d[i]=max(d[i-1],d[i-2]+nums[i])

        return d[k-1]

(2)打家劫舍

代码如下:

class Solution:

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

        k=len(nums)

        if k==0:

            return 0

        if k==1:

            return nums[0]

        if k==2:

            return max(nums[0],nums[1])

        d=[0]*k

        d[0]=nums[0]

        d[1]=max(nums[0],nums[1])

        for i in range(2,k):

            d[i]=max(d[i-1],d[i-2]+nums[i])

        return d[k-1]

2、整数拆分问题

343. 整数拆分

代码如下:

class Solution:

    def integerBreak(self, n: int) -> int:

        d=[0]*(n+1)

        if n==2:

            return 1

        if n==3:

            return 2

        d[2]=1

        d[3]=2

        for i in range(4,n+1):

            for j in range(i):

                 d[i]=max(d[i],(i-j)*j,d[i-j]*j)

        return d[-1]

核心思想

3、打家劫舍升级版,房屋首尾相连

代码如下:

class Solution:

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

        k=len(nums)

        if k==0:

            return 0

        if k==1:

            return nums[0]

        if k==2:

            return max(nums[0],nums[1])

        def d(s):

            k1=len(s)

            d=[0]*k1

            d[0]=s[0]

            d[1]=max(s[0],s[1])

            for i in range(2,k1):

                d[i]=max(d[i-2]+s[i],d[i-1])

            return d[k1-1]

        return max(d(nums[:k-1]),d(nums[1:]))

4、买卖股票的最佳时机(次数不限且有手续费)714. 买卖股票的最佳时机含手续费

关键点:把手续费算买入的价格的一部分:

代码如下:

class Solution:

    def maxProfit(self, prices: List[int], fee: int) -> int:

        n = len(prices)

        buy = prices[0]+fee 

        profit = 0

        for i in range(1, n):

            if prices[i] +fee < buy:

                buy = prices[i]+fee 

            elif prices[i] > buy:

                profit += prices[i] - buy

                buy = prices[i]

        return profit

相关文章

  • 02-16:动态规划题总结

    1、动态规划解除数博弈 1025. 除数博弈[https://leetcode-cn.com/problems/d...

  • 动态规划题总结

    最长递增子序列 给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,1...

  • 动态规划简单题总结

    感觉就分几种类型: 第1种:连续求和类型(只用dp[i-1]) 题目:53. 最大子序和 给定一个整数数组 num...

  • 4. 动态规划算法

    1. 动态规划算法总结2. 漫画:什么是动态规划?3.算法之动态规划4. 动态规划-算法

  • 动态规划之数列的最大和

    Super Jumping! Jumping! Jumping!该题作为动态规划的讲解例子,首先需要明白动态规划问...

  • 动态规划 Dynamic Programming

    从运筹学和算法的角度综合介绍动态规划 算法分类总结动态规划与静态规划的关系浅析静态规划和动态规划动态规划解非线性规...

  • 编辑距离 Edit Distance

    简介请点击leetcode 这里 这道题是动态规划。动态规划的核心思想是缓存。解决动态规划的主要方法是,找出状态转...

  • 152. Maximum Product Subarray, 乘

    这题除了动态规划,应该还有其它解法

  • leetcode 413 找数组中等差数列的个数

    这题是放到动态规划的题型里了。但是根本不用动态规划做。 这题的关键是: 至少3个元素 必须是相邻的 (这个条件让题...

  • Java 算法 - 流浪剑客斯温(动态规划)

    题意 样例 注意事项 1.解题思路   这道题肯定使用动态规划来解决,解决动态规划的问题通常来说,难点在于动态规划...

网友评论

      本文标题:02-16:动态规划题总结

      本文链接:https://www.haomeiwen.com/subject/bjovxltx.html