[BOJ 34677] 최적의 분할

View as PDF

Submit solution

Points: 3
Time limit: 1.0s
Memory limit: 2G

Problem type
Allowed languages
Assembly, Awk, C, C++, Java, Pascal, Perl, Python, Sed, Text

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

$n$, $A$, $B$가 주어질 때, 최적의 분할을 찾고, 그 때의 $k$를 출력하는 프로그램을 작성하시오.

입력 형식

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

출력 형식

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

예제 입력 1

5
1 3 2 5 4
5 4 3 2 1

예제 출력 1

3

예제 입력 2

5
1 2 3 4 5
1 5 4 3 2

예제 출력 2

1

예제 입력 3

5
1 2 3 4 5
5 4 3 2 1

예제 출력 3

5

Comments

There are no comments at the moment.