부분 수열 뒤집기

길이 N인 배열에서 부분수열 하나를 뒤집은 뒤 얻을 수 있는 가장 긴 비감소 부분수열의 길이를 구한다.

어려움8동적 계획법배열투 포인터그리디아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

농부 존은 사진을 찍으려고 소 NN마리를 한 줄로 세우고 있다 (1N501 \le N \le 50). 줄에서 ii번째 소의 키는 a(i)a(i)이다. 존은 키가 증가하는 긴 부분 수열이 줄 안에 있으면 보기 좋은 사진이 된다고 생각한다.

부분 수열은 인덱스 i1<i2<<iki_1 < i_2 < \cdots < i_k에 있는 원소 a(i1),a(i2),,a(ik)a(i_1), a(i_2), \ldots, a(i_k)를 고른 것이다. a(i1)a(i2)a(ik)a(i_1) \le a(i_2) \le \cdots \le a(i_k)이면 이 부분 수열이 증가한다고 한다.

존은 증가하는 부분 수열이 길어지도록, 처음에 부분 수열 하나를 마음대로 골라 그 원소의 순서를 뒤집을 수 있다.

예를 들어 수열이 다음과 같다고 하자.

1 6 2 3 4 3 5 3 4

아래 표시한 원소를 골라 뒤집으면

1 6 2 3 4 3 5 3 4
  ^         ^ ^ ^

다음 수열이 된다.

1 4 2 3 4 3 3 5 6
  ^         ^ ^ ^

뒤집은 부분 수열은 원래 차지하던 인덱스를 그대로 쓰고, 나머지 원소는 바뀌지 않는다.

임의의 부분 수열을 한 번 뒤집을 수 있을 때, 증가하는 부분 수열의 최대 길이를 구하여라.

입력

첫째 줄에 NN이 주어진다. 다음 NN개의 줄에 a(1),,a(N)a(1), \ldots, a(N)이 한 줄에 하나씩 주어진다. 각 값은 11 이상 5050 이하의 정수이다.

출력

부분 수열을 최대 한 번 뒤집은 뒤 얻을 수 있는 증가하는 부분 수열의 최대 길이를 출력한다. 뒤집지 않아도 된다.