2025-10-03 22:03:01 +09:00

57 lines
1.2 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
void freeAll(int* a, int* b, int* c, int* d, int* e) {
free(a); free(b); free(c); free(d); free(e);
}
int max(int a, int b) {
return a>b ? a : b;
}
int maxInArr(int* arr, int N) {
int maxNum = 0;
for(int i=0; i<N; i++) maxNum = max(maxNum, arr[i]);
return maxNum;
}
int main() {
int N;
scanf("%d",&N);
int* arr = (int*)malloc(sizeof(int)*N);
int* arrR = (int*)malloc(sizeof(int)*N);
for(int i=0; i<N; i++) {
int num;
scanf("%d",&num);
arr[i] = num;
arrR[N-i-1] = num;
}
int* dp = (int*)malloc(sizeof(int)*N);
int* dpR = (int*)malloc(sizeof(int)*N);
for(int i=0; i<N; i++) {
dp[i] = 1;
dpR[i] = 1;
}
for(int i=0; i<N; i++) {
for(int j=0; j<i; j++) {
if(arr[i] > arr[j]) dp[i] = max(dp[i], dp[j]+1);
if(arrR[i] > arrR[j]) dpR[i] = max(dpR[i], dpR[j]+1);
}
}
int* length = (int*)malloc(sizeof(int)*N);
for(int i=0; i<N; i++) length[i] = dp[i] + dpR[N-1-i] - 1;
printf("%d\n", maxInArr(length, N));
freeAll(arr, arrR, dp, dpR, length);
return 0;
}