최적의 분할

시간 제한1초메모리 제한2048 MB

요약
1부터 n까지의 순열 A와 B가 주어질 때, 같은 위치에서 두 순열을 잘라 각 조각의 최솟값 위치가 A와 B에서 일치하도록 하면서 조각 수를 최소로 하는 값을 구한다.
난이도

보통10점 중 7점

유형
동적 계획법, 분할 정복, 정렬
정답자
아직 제출이 없습니다

문제

11 이상 nn 이하 정수들로 이루어진 길이 nn인 순열 AA와 BB가 주어진다. AA와 BB에서 동일한 k−1k − 1개의위치를 골라서 각각 kk개의 조각으로 나누려고 한다. 단, 각 i=1,2,…,ki = 1, 2, \dots , k에 대해, AA의 ii번째 조각의 최솟값의 위치와 BB의 ii번째 조각의 최솟값의 위치가 서로 같아야 한다. 예를 들어서, A=(1,3,2,5,4)A =(1, 3, 2, 5, 4) 이고 B=(5,4,3,2,1)B = (5, 4, 3, 2, 1)라 하자. 만약, AA를 (1),(3,2),(5,4)(1), (3, 2), (5, 4)로 나누면, BB는 (5),(4,3),(2,1)(5), (4, 3), (2, 1)로 나누어지며, 위에서 설명한 조건을 만족시킨다. 물론 AA와 BB를 길이가 11인 nn개의 조각들로 나누면 위 조건을 쉽게 만족시킬 수 있다. 따라서 우리는 조건을 만족하면서 조각의 수 kk가 최소가 되도록 나누고자 하며, 이러한 분할을 최적의 분할이라고 하자. 위 예시에서 k=3k = 3인 분할이 최적의 분할이다.

nn, AA, BB가 주어질 때, 최적의 분할을 찾고, 그 때의 kk를 출력하는 프로그램을 작성하시오.

입력

입력은 표준입력을 사용한다. 첫 줄에 AA와 BB의 길이를 나타내는 양의 정수 nn (1≤n≤3,0001 ≤ n ≤ 3\\,000)이 주어진다. 두 번째 줄에 AA에 대한 정보가 주어지며, 11 이상 nn 이하인 nn개의 정수들이 주어진다. 세번째 줄에 BB에 대한 정보가 주어지며, 11 이상 nn 이하인 nn개의 정수들이 주어진다. 두 번째 줄과 세번째 줄에서, 같은 줄에는 같은 정수가 두 번 이상 주어지지 않는다.

출력

출력은 표준출력을 사용한다. 첫 줄에 최적의 분할의 조각 수를 출력한다.

예제3

  1. 예제 1

    입력
    5
    1 3 2 5 4
    5 4 3 2 1
    
    예상 출력
    3
    
  2. 예제 2

    입력
    5
    1 2 3 4 5
    1 5 4 3 2
    
    예상 출력
    1
    
  3. 예제 3

    입력
    5
    1 2 3 4 5
    5 4 3 2 1
    
    예상 출력
    5