같은 모서리에 있는 판매자 둘을 동쪽과 서쪽으로 한 칸씩 흩어지게 하여 모든 판매자를 서로 다른 모서리에 두는 최소 이동 횟수를 구합니다.
보통7동적 계획법정렬아직 제출이 없습니다시간 제한5초메모리 제한512 MB동서로 아주 길게 뻗은 거리의 교차로마다 핫도그 노점이 들어섰다. 문제는 한 교차로에 노점이 둘 이상 몰릴 수 있다는 것이다. 그렇게 되면 서로 손님을 빼앗는다. 그래도 방법이 없지는 않다. 노점 주인들이 계획을 세웠다.
한 교차로에 노점이 둘 이상 있으면 그중 정확히 두 노점이 이동을 한 번 수행할 수 있다. 이동은 다음과 같다.
거리가 워낙 길어서 교차로가 모자랄 일은 없다. 모든 노점의 처음 위치가 주어질 때, 노점이 모두 서로 다른 교차로에 놓일 때까지 필요한 최소 이동 횟수를 구하라.
예를 들어 서쪽에서 동쪽 순서로 각 교차로의 노점 수가 다음과 같다고 하자.
... 0 0 2 1 2 0 0 ...
이 배치는 아래처럼 이동 세 번으로 분리된다.
... 0 0 2 1 2 0 0 ...
|
+--- 여기서 이동
... 0 1 0 2 2 0 0 ...
|
+--- 여기서 이동
... 0 1 1 0 3 0 0 ...
|
+--- 여기서 이동
... 0 1 1 1 1 1 0 ...
각 교차로에는 정수 번호가 붙어 있고 음수 번호도 쓴다. 모든 i에 대해 교차로 i+1은 교차로 i의 동쪽 바로 옆 교차로이다. 입력에서는 이 번호로 교차로를 가리킨다.
첫 줄에 테스트 케이스의 수 T가 주어진다. 이어서 T개의 테스트 케이스가 주어진다. 각 테스트 케이스의 첫 줄에는 처음에 노점이 하나 이상 있는 교차로의 수 C가 주어진다. 다음 C개의 줄에는 공백으로 구분된 두 정수 P와 V가 주어지며, 교차로 P에 노점이 V개 있다는 뜻이다.
각 테스트 케이스마다 Case #x: M 형식으로 한 줄씩 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, M은 모든 노점이 서로 다른 교차로에 놓일 때까지 수행해야 하는 최소 이동 횟수이다.