세 공원에 놓인 N개의 벽돌을 주어진 초기 배치에서 시작해 최대 16개의 목표 배치를 모두 거친 뒤 한 공원에 모으는 최소 비용을 구한다.
어려움8그래프최단 경로완전 탐색비트 연산아직 제출이 없습니다시간 제한2초메모리 제한512 MB자카르타에는 1번 공원, 2번 공원, 3번 공원이라는 세 개의 공원이 있다. 자카르타의 새 주지사는 이 공원들에 벽돌을 쌓아 장식하려고 한다. 자카르타에는 1번부터 N번까지 번호가 매겨진 N개의 벽돌이 있으며, 번호가 작을수록 작은 벽돌이다. 작은 벽돌 위에는 큰 벽돌을 올릴 수 없으므로, 벽돌 j 위에 벽돌 i를 올릴 수 있는 경우는 i<j인 경우뿐이다.
벽돌 배치란 N개의 벽돌을 세 공원에 나누어 쌓은 상태를 뜻한다. 각 공원에는 최대 하나의 벽돌 더미만 있어야 하며, 모든 더미는 위의 규칙을 따라야 한다. 예를 들어 N=3일 때, 1번 공원에 벽돌 1(위)과 벽돌 2(아래)가 있고, 2번 공원은 비어 있고, 3번 공원에 벽돌 3이 있는 배치가 가능하다.
배치는 다음 연산을 반복하여 바꿀 수 있다.
처음에는 주어진 초기 배치에서 시작한다. 주지사는 정해진 M개의 배치를 순서에 상관없이 각각 적어도 한 번씩 보고 싶어 한다. 마지막에는 모든 벽돌이 하나의 공원에 모여 있어야 한다. 주지사의 요구를 만족하는 총비용의 최솟값을 구하라.
형식적으로, 주지사가 보고 싶어 하는 배치를 G1,G2,…,GM이라 하자. 다음 조건을 만족하는 배치 수열 C0,C1,…,Ck (k≥0) 중 비용이 최소인 것을 찾는다.
첫째 줄에 벽돌의 개수와 보고 싶은 배치의 개수인 두 정수 N M (1≤N≤40, 0≤M≤16)이 주어진다. 다음 세 줄에는 각 줄에 세 개의 정수가 주어진다. i번째 줄의 j번째 정수는 i번 공원에서 j번 공원으로 벽돌 하나를 옮기는 비용 Ri,j (0≤Ri,j≤1000, Ri,i=0)이다. 다음 세 줄에는 초기 배치가 주어지고, 이어지는 M개의 블록에는 주지사가 보고 싶어 하는 배치가 주어진다. 각 블록은 세 줄로 이루어지며, 하나의 배치는 다음 형식으로 적는다.
하나의 배치는 세 줄로 적히며, i번째 줄은 i번 공원의 벽돌 개수인 정수 K (0≤K≤N)로 시작하고, 뒤이어 i번 공원의 벽돌 번호를 뜻하는 K개의 정수 A1,A2,…,AK (1≤Ai≤N)가 주어진다. 모든 1≤i<j≤K에 대해 Ai<Aj가 보장되며, 1부터 N까지의 모든 정수는 세 줄에 합쳐서 정확히 한 번씩 등장한다.
주지사의 요구를 만족하는 최소 총비용을 한 줄에 출력한다.
첫 번째 경우에 대한 설명
첫 번째 경우에서는 처음에 1번 공원에 벽돌 1과 벽돌 2가 있고 3번 공원에 벽돌 3이 있다. M=0이므로 모든 벽돌을 하나의 공원에 모으기만 하면 되며, 예를 들어 다음 연산들로 비용 5에 달성할 수 있다.
이제 모든 벽돌이 2번 공원에 있으며 총비용은 5이다. 5보다 적은 비용으로는 불가능하다. 연산 횟수를 최소화할 필요는 없음에 유의하라.
두 번째 경우에 대한 설명
두 번째 경우에서는 두 번째로 원하는 배치를 먼저 만족한 뒤 첫 번째 배치를 만족하는 것이 최적이다. 초기 배치에서 두 번째 배치까지는 4번의 연산으로 총비용 8에 도달할 수 있다. 두 번째 배치에서 첫 번째 배치까지는 7번의 연산으로 총비용 14에 도달할 수 있다. 첫 번째 배치는 이미 모든 벽돌이 하나의 공원에 모여 있으므로 추가 연산이 필요 없다. 따라서 총비용은 22이다.