시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 1024 MB (추가 메모리 없음)61917314233.971%

문제

정휘는 정수로 구성된 $N\times N$ 크기의 배열의 가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸까지 최단 경로로 이동하려고 한다. 한 칸에서 다른 칸으로 이동할 때 서로 변을 공유하는 칸으로만 이동할 수 있다.

정휘는 배열에서 이동하면서 만난 정수들을 순서대로 모아서 성현이에게 선물로 주려고 한다. 성현이는 증가하는 부분 수열의 길이가 긴 수열을 좋아하기 때문에, 정휘는 최장 증가 부분 수열의 길이가 최대인 수열을 만들어서 주려고 한다.

정휘는 문제를 만들어야 하기 때문에 경로를 찾을 여유가 없어서 여러분들에게 도움을 요청했다. $N\times N$ 크기의 배열이 주어지면 만들 수 있는 수열 중 최장 증가 부분 수열의 길이의 최댓값을 대신 구해보자.

입력

첫째 줄에 $N$이 주어진다. ($1 \leq N \leq 100$)

이어 $N$개의 줄에, 각각 $N$개의 정수가 공백을 사이에 두고 주어진다. 각 정수는 $1$ 이상 $10\,000$ 이하다.

출력

최장 증가 부분 수열의 길이의 최댓값을 출력한다.

예제 입력 1

3
1 2 3
3 2 1
3 4 5

예제 출력 1

4

첫 번째 예시에서 가능한 방법으로 $\lbrace1,2,3,1,5\rbrace, \lbrace1,2,2,4,5\rbrace, \lbrace1,3,2,4,5\rbrace, \lbrace1,3,3,4,5\rbrace$ 등이 있다.

예제 입력 2

3
1 1 1
1 1 1
1 1 1

예제 출력 2

1

노트

  • Python 사용자는 PyPy로 제출하는 것을 권장한다.
  • 부분 수열이란 주어진 수열에서 1개 이상의 원소를 골라 원래 순서대로 나열하여 얻은 수열을 말한다.
  • 증가하는 부분 수열이란 맨 처음 원소를 제외한 모든 원소가 바로 전 원소보다 큰 수열을 말한다.
    다시 말해, 길이가 $N$인 부분 수열 $A$가 있을 때, $A_{i-1} < A_i (2 \leq i \leq N)$을 만족하면 $A$는 증가하는 부분 수열이다.
  • 최장 증가 부분 수열이란 주어진 수열의 증가하는 부분 수열 중 길이가 가장 긴 수열을 의미한다.

출처

High School > 선린인터넷고등학교 > 제6회 천하제일 코딩대회 본선 I번