칩 설계

시간 제한10초메모리 제한128 MB

요약
N x N 칩에 위젯을 최대한 놓되 각 행과 열의 부품 수가 같고 어떤 행이나 열도 전체 부품 수의 A/B를 넘지 않도록 하는 최대 개수를 구한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 그리디, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

유명한 마이크로프로세서 회사 letnI는 컴퓨터 칩 위에 교체 가능한 부품(위젯)을 배치하는 일에 당신의 도움이 필요하다. 각 칩은 N×NN \times N개의 정사각형 슬롯으로 이루어져 있다. 한 슬롯에는 위젯을 최대 하나 끼울 수 있으며, 목표는 위젯을 최대한 많이 추가하는 것이다.

최신 칩 설계는 매우 복잡하므로 다음 제한들을 지켜야 한다.

  • 어떤 슬롯은 사용할 수 없다.
  • 어떤 슬롯은 이미 다른 부품이 차지하고 있어서 새 위젯을 끼울 수 없다.
  • 칩의 가로 변과 세로 변을 잇는 형제 메모리 버스가 있으며, 이들의 대역폭이 같아야 한다. 이를 위해 모든 인덱스 ii에 대해 ii번째 행에 있는 부품의 개수와 ii번째 열에 있는 부품의 개수가 같아야 한다. 여기서 부품의 개수는 이미 놓여 있는 부품과 새로 추가한 위젯을 모두 포함한다.
  • 각 행과 열의 끝에는 전원 공급 장치가 연결된다. 과열을 막기 위해, 임의의 한 행이나 열에 있는 부품의 개수와 칩 전체에 있는 부품의 총 개수의 비율이 A/BA / B를 초과해서는 안 된다(AA와 BB는 각 칩마다 주어진다).

칩은 각 줄에 NN개의 문자가 있는 NN개의 줄로 주어진다. .은 열려 있는(현재 사용되지 않은) 슬롯, /은 사용할 수 없는 슬롯, C는 이미 다른 부품이 차지한 슬롯이다. 예를 들어 다음 칩을 보자.

CC/..
././/
..C.C
/.C..
/./C/

한 행이나 열이 전체 부품의 3/103/10을 초과해서 가질 수 없다고 하면, 이 칩에 추가할 수 있는 위젯의 최대 개수는 77이다. 아래는 한 가지 유효한 배치이며, W는 열린 슬롯에 추가한 위젯을 나타낸다.

CC/W.
W/W//
W.C.C
/.CWW
/W/C/

칩이 주어질 때, 추가할 수 있는 위젯의 최대 개수를 구하여라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 케이스의 첫 줄에는 세 정수, 즉 칩의 크기 NN (1≤N≤401 \le N \le 40)과 위에서 설명한 비율을 나타내는 AA, BB (1≤B≤10001 \le B \le 1000, 0≤A≤B0 \le A \le B)가 주어진다. 이어지는 NN개의 줄은 슬롯의 상태를 나타내며, 각 줄에는 위에서 설명한 대로 ., /, C 중 하나인 문자 NN개가 주어진다.

마지막 테스트 케이스 다음에는 0 세 개로 이루어진 줄이 온다.

출력

각 테스트 케이스에 대해 한 줄을 출력한다. 유효한 위젯 배치가 존재하면 Case X: k를 출력하는데, 여기서 XX는 테스트 케이스 번호(11부터 시작)이고 kk는 추가할 수 있는 위젯의 최대 개수이다. 유효한 배치가 없으면 Case X: impossible을 출력한다.

예제5

  1. 예제 1

    입력
    2 1 1
    /.
    //
    2 50 100
    /.
    C/
    2 100 100
    ./
    C.
    5 3 10
    CC/..
    ././/
    ..C.C
    /.C..
    /./C/
    5 2 10
    CC/..
    ././/
    ..C.C
    /.C..
    /./C/
    0 0 0
    
    예상 출력
    Case 1: 0
    Case 2: 1
    Case 3: impossible
    Case 4: 7
    Case 5: impossible
    
  2. 예제 2

    입력
    1 1 1
    .
    1 1 1
    C
    1 1 1
    /
    1 0 1
    C
    0 0 0
    
    예상 출력
    Case 1: 1
    Case 2: 0
    Case 3: 0
    Case 4: impossible
    
  3. 예제 3

    입력
    2 1 1
    ..
    ..
    0 0 0
    
    예상 출력
    Case 1: 4
    
  4. 예제 4

    입력
    2 40 100
    ..
    ..
    0 0 0
    
    예상 출력
    Case 1: 0
    
  5. 예제 5

    입력
    3 1 2
    C..
    .C.
    ..C
    0 0 0
    
    예상 출력
    Case 1: 6