博主头像

ワクワク

HJ24 合唱队

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

int main() {
    int filter[100]; //所有同学身高
    int TxNumber; //同学数量
    int MaxNumber = 0; //记录最大序列总人数
    int LMax[3000]; //以最高同学为中间点,左侧最大同学数(不含最高同学本人)
    int RMax[3000];
    while (scanf("%d", &TxNumber) != EOF) { // 注意 while 处理多个 case
        // 64 位输出请用 printf("%lld") to 
        memset(LMax, 0 , 3000);
        memset(RMax, 0 , 3000);
        for (int i = 0; i < TxNumber; i++) {
            scanf("%d",&filter[i]);
        }
        //计算左侧最长序列
        for (int i = 1; i < TxNumber; i++) {
            for (int j = 0; j < i; j++) {
                printf("LMax[%d] = %d\n",i,LMax[i]);
                if ((filter[j] < filter[i]) && (LMax[i] < RMax[j] + 1)) {
                    LMax[i] = LMax[j] + 1;
                    printf("LMax[%d] = %d\n",i,LMax[i]);
                }
            }
        }
        //计算右侧
        for (int i = TxNumber - 2; i >= 0; i--) {
            for (int j = TxNumber - 1; j > i; j--) {
                if ((filter[j] < filter[i]) && (LMax[i] < RMax[j] + 1)) {
                    RMax[i] = RMax[j] + 1;
                }
            }
        }
        //统计队列最长人数
        for (int i = 0; i < TxNumber; i++) {
            int  tmp = LMax[i] + RMax[i] + 1;
            if (MaxNumber < tmp) {
                printf("LMax[%d] = %d\n",i,LMax[i]);
                printf("RMax[%d] = %d\n",i,RMax[i]);
                printf("tmp = %d\n",tmp);
                MaxNumber = tmp;
            }
        }
        printf("TxNumber = %d\n",TxNumber);
        printf("MaxNumber = %d\n",MaxNumber);
    }
    return 0;
}
HJ24 合唱队
https://blog.minliny.com/index.php/archives/9/
本文作者 Minliny
发布时间 2025-08-10
许可协议 CC BY-NC-SA 4.0
发表新评论