최장 최장 증가 부분 수열

아직 제출이 없습니다시간 제한1초메모리 제한1024 MB

문제

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

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

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

입력

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

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

출력

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

힌트

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