题解 | 合唱队

合唱队

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

import sys

n = int(input())
lst = input().split()
h = [int(x) for x in lst]  # 简化输入处理

def max_chorus_length(heights):
    n = len(heights)
    if n <= 2:
        return n  # 人数不足时无需调整
    
    # 计算每个位置向左的最长递增子序列长度
    left = [1] * n
    for i in range(n):
        for j in range(i):
            if heights[j] < heights[i]:  # 严格递增
                left[i] = max(left[i], left[j] + 1)
    
    # 计算每个位置向右的最长递减子序列长度
    right = [1] * n
    for i in range(n-1, -1, -1):
        for j in range(i+1, n):
            if heights[j] < heights[i]:  # 严格递减
                right[i] = max(right[i],right[j] + 1)
    
    # 找到中间点i,使得left[i]+right[i]-1最大(减1是因为i被重复计算)
    max_length = 0
    for i in range(n):
        max_length = max(max_length, left[i] + right[i] - 1)
    
    return max_length

# 计算最少出列人数
max_keep = max_chorus_length(h)
min_leave = n - max_keep
print(min_leave)

#动态规划#
全部评论

相关推荐

感觉今年拿到大厂实习offer的人很多,光是身边同学室友都是好几个offer。由此可见,秋招得有多卷
小浪_Coding:必须卷的起飞, 应该比25更卷一点, 25已经是哀声一片了, 26会更难一点, 现在还有`很多25未找到的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-25 17:22
点赞 评论 收藏
分享
05-26 09:07
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
qq乃乃好喝到咩噗茶:院校后面加上211标签,放大加粗,招呼语也写上211
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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