포럼
문제 USACO0266

부분 수열 뒤집기

설명

농부 존은 사진을 찍기 위해 \(N\)마리의 소를 한 줄로 세우고 있다 (\(1 \leq N \leq 50\)). 줄에서 \(i\)번째 소의 키는 \(a(i)\)이며, 농부 존은 소들의 줄에 키 순으로 증가하는 긴 부분 수열이 있으면 미적으로 보기 좋은 사진이 될 것이라고 생각한다.

복습하자면, 부분 수열이란 소들의 수열에서 어떤 인덱스들 \(i_1 < i_2 < \ldots < i_k\)에서 뽑은 원소들의 부분집합 \(a(i_1), a(i_2), \ldots, a(i_k)\)이다. \(a(i_1) \leq a(i_2) \leq \ldots \leq a(i_k)\)이면 이 부분 수열이 증가한다고 한다.

FJ는 소들의 배열 안에 긴 증가 부분 수열이 존재하기를 바란다. 이를 보장하기 위해, FJ는 처음에 임의의 부분 수열 하나를 골라 그 원소들을 뒤집는 것을 허용하기로 한다.

예를 들어 다음 리스트가 있을 때

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
  ^         ^ ^ ^

뒤집힌 부분 수열이 처음 차지하던 것과 같은 인덱스들을 그대로 사용하고, 나머지 원소들은 변하지 않는다는 점에 주목하자.

임의의 부분 수열 하나를 한 번 뒤집을 수 있을 때, 만들 수 있는 증가 부분 수열의 최대 길이를 구하시오.

문제 출처: Lewin Gan

제약

문제 출처: Lewin Gan

입력 형식

입력의 첫째 줄에 \(N\)이 주어진다. 다음 \(N\)개의 줄에 \(a(1) \ldots a(N)\)이 주어지며, 각각은 \(1 \ldots 50\) 범위의 정수이다.

출력 형식

최대 한 개의 부분 수열을 뒤집은 뒤 만들 수 있는 최장 증가 부분 수열의 원소 개수를 출력한다.

Standard input / output
This problem is judged over standard input/output. The original contest used named files — if you prefer the classic interface, tick “File I/O” on the submit form and read/write these files instead:
입력을 읽을 파일 subrev.in · 출력을 쓸 파일 subrev.out
예제 1
입력
9
1
2
3
9
5
6
8
7
4
출력
9
문제 정보

riseoj 작성

출처 올림피아드 > USACO > 2016-2017 > January > Platinum

태그

평가 및 의견

Subsequence Reversal

개요
출제자 난이도 Unrated 레이팅 미적용 의견 0 / 1 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

Subsequence Reversal

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
파일 입출력 (subrev.in / subrev.out — classic USACO interface; off = stdin/stdout)
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8