梅花桩_动态规划(Python)

Redraiment的走法

http://www.nowcoder.com/questionTerminal/24e6243b9f0446b081b1d6d32f2aa3aa

关于初始化

数组 dp 中存储着对应 nums 位置的桩最大次数,所以创建的时候默认为 1,因为当前桩本身就是一步。

关于状态转移方程

其中 nums[j] < nums[i],即扫描 i 前面的桩,如果有比 i 小的话就使用状态转移方程 dp[i] = max(dp[i], dp[j] + 1),方程的意思是————如果前面某个桩(桩j)比 桩i 小,那么从那个桩踩上 桩i 的话自然就多了一步,我们拿这个踩完之后的步数 dp[j] + 1 跟当前存储的最大步数 dp[i] 比较一下,选个大的放进去。

while True:
    try:
        n, nums = int(input()), list(map(int, input().split()))
        dp = [1] * n
        for i in range(n):
            for j in range(i):
                if nums[j] < nums[i]:
                    dp[i] = max(dp[i], dp[j] + 1)
        print(max(dp))
    except:
        break
全部评论
好像最后得出的dp里每个位置最大步数和实际对不上吧
1 回复 分享
发布于 2022-07-21 15:47
值是没问题,但是走法有问题,要求是从低到高,你的方***包含错误走法,如:2、1、5
点赞 回复 分享
发布于 2021-04-13 19:30
O(n^2)复杂度太高了 建议使用动态规划 + 贪心+ 二分 降到O(nlogn)
点赞 回复 分享
发布于 2022-02-10 10:29
聪明,终点桩往前踩,比另一个往后踩的好理解多了。
点赞 回复 分享
发布于 2023-02-15 01:01 广东

相关推荐

11-29 11:21
门头沟学院 Java
点赞 评论 收藏
分享
有趣的牛油果开挂了:最近这个阶段收到些杂七杂八的短信是真的烦
点赞 评论 收藏
分享
评论
63
9
分享
牛客网
牛客企业服务