https://www.acmicpc.net/problem/11054
DP를 이용한다.
#include <iostream>
using namespace std;
int main(){
    int A;
    cin >> A;
    int Ai[A+1] = {0,};
    for(int i=1; i<=A; i++)
        cin >> Ai[i];
    int a[A+1] = {1, };
    int b[A+1] = {1, };
    // dp[N] = 가장 긴 바이토닉 수열 
    // = [1~N-1] 까지 가장 긴 증가 부분 수열 + 1(N) + [N+1 ~ A] 까지 가장 긴 감소 부분 수열
    
    for(int i=1; i<=A; i++){
        a[i] = 1;
        for(int j=1; j<i; j++){
            if(Ai[j] < Ai[i]){
                a[i] = max(a[j]+1, a[i]);
            }
        }
    }
    for (int i=A; i>=1; i--){
        b[i] = 1;
        for (int j=A; j>i; j--){
            if(Ai[j] < Ai[i]){
                b[i] = max(b[j]+1, b[i]);
            }
        }
    }
    int result = 0;
   for (int i=1; i<=A; i++){
       int sum = a[i] + b[i] - 1;
       if (result < sum)
            result = sum;
    }
    cout << result << endl;
    return 0;
}중간에 생각이 꼬여서 복잡해졌는데 그냥 생각한 거랑 같은 알고리즘..이었당