题解 | #合唱队#

合唱队

http://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4

# 动态规划
def lengthOfLIS(lst):
    dp = []
    for i in range(len(lst)):
        dp.append(1)
        for j in range(i):
            if lst[i] > lst[j]:
                dp[i] = max(dp[i], dp[j] + 1)
    return dp # 每人左边可以站的人数

while True:
    try:
        n, heights = int(input()), list(map(int, input().split()))
        # dp1:每人左边可以站的人数,dp2:每人右边可以站的人数
        dp1, dp2 = lengthOfLIS(heights), lengthOfLIS(heights[::-1])[::-1]
        res = []
        for i in range(len(dp1)):
            res.append(dp1[i] + dp2[i] - 1)
        print(n-max(res))
    except:
        break
全部评论
运行超时啊这个
1 回复 分享
发布于 2022-12-03 11:39 新加坡
天才
点赞 回复 分享
发布于 2024-08-01 22:07 广东
精辟大佬就是大佬啊,一遍看下来思路很清晰,唯一没想通为什么d[i].append(1),于是我按我思路换成了d[i].append(0), 后面算整队长度换成dp1[i]+dp2[i]+1,结果也是一样,再接着就理解了
点赞 回复 分享
发布于 2023-02-28 22:29 四川
有点没看懂为什么d[j]+1,i不是一定再j的后面吗,d[i]已经是最长的了啊?
点赞 回复 分享
发布于 2022-01-09 22:57
try 放在while 外面,省时间
点赞 回复 分享
发布于 2021-11-28 23:42

相关推荐

06-25 09:33
厦门大学 Java
程序员饺子:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司7个岗位
点赞 评论 收藏
分享
酷酷我灵儿帅:这去不去和线不线下面说实话没啥关系
点赞 评论 收藏
分享
评论
27
11
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务