首页 > 试题广场 >

合唱队形

[编程题]合唱队形
  • 热度指数:15207 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1, T2, …, TK, 则他们的身高满足T1 < T2 < … < Ti , Ti > Ti+1 > … > TK (1 <= i <= K)。 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

输入描述:
输入的第一行是一个整数N(2 <= N <= 100),表示同学的总数。
第一行有n个整数,用空格分隔,第i个整数Ti(130 <= Ti <= 230)是第i位同学的身高(厘米)。


输出描述:
可能包括多组测试数据,对于每组数据,
输出包括一行,这一行只包含一个整数,就是最少需要几位同学出列。
示例1

输入

8
186 186 150 200 160 130 197 220

输出

4
def hechang(s, n):
    m = 0
    dp1 = [1]*n
    dp2 = [1]*n
    # dp1[0] = 1
    # dp2[0] = 1
    for i in range(1, n):
        for j in range(0, i):
            if s[i] > s[j]:
                dp1[i] = max(dp1[i], dp1[j]+1)
    for i in range(n-2, -1, -1):
        for j in range(n-1, i, -1):
            if s[i] > s[j]:
                dp2[i] = max(dp2[i], dp2[j]+1)
    for i in range(n):
        a = dp2[i] + dp1[i]
        m = max(a, m)
    return n - m + 1
n = int(input())
s = list(map(int, input().split()))
print(hechang(s, n))

发表于 2025-03-15 17:49:53 回复(0)