넥슨에서 새로 개발하고 있는 벽돌깨기 게임은 다음과 같은 규칙으로 이루어져 있다.
아래 그림의 예를 고려해보자. 줄로 벽돌들이 쌓여 있고, 입력받은 순열은 라고 하자.
번 줄에 있는 벽돌 개를 깨고, 번 줄에 있는 벽돌 개를 깬 결과는 다음과 같다. 이 결과가 조건을 만족하며, 많은 방법 중에서 가장 벽돌을 깨는 횟수가 적은 답이 된다.
반면, 같은 입력에 대해서 순열이 으로 주어진다면 이 경우에 대해서는 답이 존재하지 않는데, 벽돌을 없애는 것만으로는 번째 줄이 전체에서 번째로 돌이 많게 할 수는 없기 때문이다.
벽돌의 줄 수, 각 줄에 쌓인 벽돌의 수, 입력 순열이 주어졌을 때 주어진 순열과 각 열에 쌓인 벽돌의 수의 순서가 일치하게 하도록 벽돌을 깨는 횟수의 최소값을 구하는 프로그램을 작성하시오.
첫째 줄에 벽돌의 줄 수를 나타내는 자연수 ( 이상 이하)이 주어진다.
다음 줄에는 개의 자연수가 주어지는데, 각각 왼쪽부터 오른쪽으로 차례로 각 줄을 보았을 때 이 줄에 쌓여있는 벽돌 수를 나타낸다. 한 줄에 올 수 있는 벽돌의 수는 이상 이하이다.
그 다음 줄에는 부터 사이의 숫자가 정확하게 한번씩 포함된 개의 숫자로 이루어진 순열이 주어진다.
한 줄로 결과를 출력한다. 여기에는 주어진 조건을 만족하게 하도록 벽돌을 깨는 횟수의 최소값을 출력한다. 만약 벽돌을 깨는 것으로 조건을 만족할 수 없다면, -1
을 출력한다. 아무 벽돌을 깨지 않더라도 조건을 만족한다면 을 출력한다.
5 3 5 2 6 4 1 3 2 5 4
4
5 3 5 2 6 4 1 2 4 5 3
-1
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞추어야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 60점
이고 한 줄에 쌓일 수 있는 벽돌의 수는 최대 .
종류 2: 140점
문제의 원래 제한조건 이외의 추가된 제한이 없음.