题解 | #合唱队#

合唱队

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

#include <stdio.h>
#include <string.h>


int main(){

    int n;
    scanf("%d", &n);

    int tall[n];
    memset(tall, 0, sizeof(tall));
    for(int i = 0; i < n; i++){
        scanf("%d", tall + i);
    }

    int inc[n], dec[n], sum[n];
    memset(inc, 0, sizeof(inc));
    memset(dec, 0, sizeof(dec));
    memset(sum, 0, sizeof(sum));

    for(int i = n - 1; i >= 0; i--){
        for(int j = i + 1; j < n; j++)
        {
            if(tall[i] > tall[j] && dec[i] < dec[j] + 1)
                dec[i] = dec[j] + 1;
            }

    }

    for(int i = 0; i < n; i++){
        for(int j = i - 1; j >= 0; j--){
            if(tall[i] > tall[j] && inc[i] < inc[j] + 1){
                inc[i] = inc[j] + 1;
            }
        }

    }


    int max = 0;
    for(int i = 0; i < n; i++){
        sum[i] = inc[i] + dec[i];
        max = max > sum[i] ? max : sum[i];
    }

    printf("%d", n - max - 1);

    return 0;
}

全部评论
找最长的上升、下降子串, inc[i] 记录 i 前面有几个符合规则 (上升) 的数字;dec同理
点赞 回复 分享
发布于 2023-03-06 20:51 美国

相关推荐

ResourceUtilization:四六级不愧是大学最有用的证之一
点赞 评论 收藏
分享
刘湘_passion:太强了牛肉哥有被激励到
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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