zoukankan      html  css  js  c++  java
  • 198/213 打家劫舍(动态规划)

    https://leetcode-cn.com/problems/house-robber-ii/

    思路: 

      1. 题目求数组非连续元素的最大和,状态转移方程为:

        dp[n] = max(dp[n-1],dp[n-2] + num)

      2. 第二题要求 取了第0号num就不能要最后一项num,我就正反算了两边,通过了,时间效率比较低,我现在去看看答案。

    注意:

       我的版本:用了一个二维数组来记录路径,然后再顺序倒序运行两遍。。。

       答案版本:直接运行    max(my_rob(nums[:-1]),my_rob(nums[1:])) if len(nums) != 1 else nums[0]

    收获:

       状态转移方程一定要想清楚再动笔啊 - - 

     代码:

    class Solution:
        def rob(self, nums: List[int]) -> int:
            def robOnce(nums):
                dpFst,dpSec = 0,0
                dp = [[i] for i in range(len(nums))]
                print(dp)
                selection = -1
                if len(nums)<4: return max(nums) if nums else 0
                for i in range(len(nums)-1):
                    if dpFst + nums[i] > dpSec:
                        if i > 1:dp[i] += dp[i-2]
                        cur = dpFst + nums[i]
                    elif dpFst + nums[i] == dpSec:
                        if i>1 and 0 not in dp[i-2]:dp[i] += dp[i-2]
                        elif i>0 and 0 not in dp[i-1]:dp[i] = dp[i-1]
                        elif i > 0: dp[i] = dp[i-1]
                        cur = dpFst + nums[i]
                    else:
                        if i>0 :dp[i] = dp[i-1]
                        cur = dpSec
                    print(dp)
                    dpFst,dpSec = dpSec,cur
                    print(dpFst,dpSec)
                #如果选了0号元素,则不考虑最后一个
                print(dp)
                if 0 in dp[-3]:
                    print('first')
                    print(dpFst,dpSec)
                    return max(dpFst,dpSec)
                    
                else:
                    print('sec')
                    print (dpFst,nums[-1],dpSec)
                    return max(dpFst+nums[-1],dpSec)
            a = robOnce(nums)
            b = robOnce(nums[::-1])
            return max(a,b)
  • 相关阅读:
    WPF中如何用代码触发按钮Click处理
    [转帖]HOWTO rename column name in Sqlite3 database
    WPF RichTextBox设置文本颜色
    ElasticSearch+ElasticGeo+Geoserver发布ES地理数据
    SLF4J: Class path contains multiple SLF4J bindings.
    Spark 官方文档(5)——Spark SQL,DataFrames和Datasets 指南
    Spark 官方文档(4)——Configuration配置
    Spark 官方文档(2)——集群模式
    spark 官方文档(1)——提交应用程序
    Learning Spark 第四章——键值对处理
  • 原文地址:https://www.cnblogs.com/ChevisZhang/p/12250035.html
Copyright © 2011-2022 走看看