임스의 땅따먹기

시간 제한1.5초메모리 제한1024 MB

요약
0인 칸에 최대 K개의 설계도를 서로 다르게 배치한 뒤, 0을 포함하지 않는 정사각형 영역의 최대 합을 구한다.
난이도

어려움10점 중 8점

유형
누적 합, 이분 탐색, 동적 계획법, 정렬
정답자
아직 제출이 없습니다

문제

임스는 N×NN \times N 크기의 격자판 모양의 국가에서 살고 있다. 격자판의 ii행 jj열에 위치한 칸에는 해당 칸의 가치를 나타내는 음이 아닌 정수 w_ijw\_{ij}가 적혀 있다.

임스는 가지고 있는 땅의 일부분을 자신의 영역으로 정복하려고 한다. 임스가 정복하려고 하는 영역은 다음 조건을 만족해야 한다.

  • 임스의 영역은 각 변이 격자판과 평행한 정사각형 영역이다. 구체적으로 영역은 1≤a≤b≤N,1≤c≤d≤N,b−a=d−c1 \leq a \leq b \leq N, 1 \leq c \leq d \leq N, b - a = d - c를 만족하는 정수 (a,b,c,d)(a, b, c, d)에 대하여 다음과 같이 정의한다.

    • a≤x≤b,c≤y≤da \leq x \leq b, c \leq y \leq d를 만족하는 정수 x,yx, y에 대해 xx행 yy열에 위치한 칸은 영역에 포함되어야 한다.
    • a≤x≤b,c≤y≤da \leq x \leq b, c \leq y \leq d를 만족하지 않는 1≤x,y≤N1 \leq x, y \leq N에 대해 xx행 yy열에 위치한 칸은 영역에 포함되지 않아야 한다.
  • 임스는 가치가 없는 땅을 싫어하기 때문에 영역 내부에는 가치가 00인 칸은 없어야 한다. 즉, (a,b,c,d)(a, b, c, d)로 정의된 영역에 대하여 a≤x≤ba \leq x \leq b, c≤y≤dc \leq y \leq d를 만족하는 모든 정수 x,yx, y에 대해 w_xy≠0w\_{xy} \neq 0을 만족해야 한다.

  • 영역의 가치는 영역 내부 칸의 가치의 합으로 정의된다. 즉, (a,b,c,d)(a, b, c, d)로 정의된 영역의 가치는 ∑_a≤x≤b∧c≤y≤dw_xy\displaystyle \sum\_{a \leq x \leq b \land c \leq y \leq d} w\_{xy}이다.

하지만 임스는 가치가 없는 칸이 너무 많다는 것을 알게 되었다. 그래서 가치가 없는 칸에 건물을 건설해 가치를 올리고자 한다. 임스는 총 KK개의 설계도를 가지고 있으며, 임스는 이 중 최대 KK개를 사용하여 가치가 없는 칸에 건물을 건설할 수 있다.

  • 임스는 가지고 있는 KK개의 설계도 중 ii번째 설계도는 d_id\_{i}의 가치를 가지고 있다.
  • d_id\_{i}의 가치를 가지고 있는 설계도를 사용하면 해당 칸에 가치가 d_id\_{i}인 건물을 건설할 수 있으며, 이로 인해 해당 칸의 가치가 d_id\_{i} 증가한다.
  • 임스는 현재 가치가 없는 칸마다 설계도를 최대 한 번 사용하여 가치를 올릴 계획이다.
  • 한 번 사용한 설계도는 다시 사용할 수 없다.

임스는 자신이 가지고 있는 설계도를 적절히 사용한 후, 영역 중 가치가 최대인 영역을 자신의 영역으로 정복하려고 한다. 하지만 가치가 최대인 영역이 어디인지 계산하지 못하고 있다. 임스를 도와주자!

입력

첫 번째 줄에 임스가 가지고 있는 땅의 크기를 나타내는 정수 NN이 주어진다. (1≤N≤500)(1 \leq N \leq 500)

다음 NN개의 줄에 걸쳐 ii번째 줄에 NN개의 음이 아닌 정수 w_ijw\_{ij}가 공백으로 구분되어 주어진다. (0≤w_ij≤9)(0 \leq w\_{ij} \leq 9)

N+2N + 2번째 줄에 임스가 가지고 있는 설계도의 개수 KK가 주어진다. (1≤K≤100,000)(1 \leq K \leq 100 \\, 000)

N+3N + 3번째 줄에 임스가 가지고 있는 설계도의 가치 d_1,d_2,⋯ ,d_Kd\_{1}, d\_{2}, \cdots, d\_{K}가 공백으로 구분되어 주어진다. (1≤d_i≤9)(1 \leq d\_{i} \leq 9)

출력

첫 번째 줄에 임스가 가진 설계도를 적절히 사용한 후 가치가 최대인 영역의 가치를 구해 출력한다.

예제3

  1. 예제 1

    입력
    3
    1 0 0
    0 1 3
    0 4 1
    1
    3
    
    예상 출력
    9
    
  2. 예제 2

    입력
    5
    9 0 0 0 0
    0 0 0 0 0
    0 1 1 1 1
    1 0 1 1 0
    0 1 1 1 1
    2
    7 8
    
    예상 출력
    17
    
  3. 예제 3

    입력
    3
    7 0 0
    0 2 0
    0 0 2
    1
    8
    
    예상 출력
    8