아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

건포도

면접 대비

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

요약
N×M 초콜릿을 직선으로 잘라 1×1 조각으로 나눌 때, 자르는 조각에 든 건포도 수만큼 비용을 지불하므로 총 지불량을 최소로 만드는 값을 구한다.
난이도

보통10점 중 6점

유형
동적 계획법, 누적 합, 분할 정복, 구현
정답자
아직 제출이 없습니다

문제

플로브디브의 유명한 초콜릿 가공업자 Bonny는 가로 MM칸, 세로 NN칸의 격자로 이루어진 N×MN \times M 크기의 건포도 초콜릿을 만들었다. 각 1×11 \times 1 칸에는 건포도가 최소 1개 이상 들어 있으며, 두 칸 이상에 걸쳐 있는 건포도는 없다.

처음에 초콜릿은 하나의 커다란 블록이며, Bonny는 이것을 N×MN \times M개의 1×11 \times 1 조각으로 모두 나누어야 한다. 이 일은 욕심쟁이 Peter가 맡는다. Peter는 한 번에 하나의 직사각형 조각을 가로 또는 세로 방향의 직선을 따라 두 조각으로 자를 수 있고, 자를 때마다 보상을 요구한다.

Bonny는 돈이 없어 건포도로 보상을 지불한다. Peter의 조건은 이렇다: 직사각형 조각 하나를 두 조각으로 자를 때마다, 자르기 직전 그 조각에 들어 있던 건포도의 총 개수만큼을 받는다. 어떤 조각을 어떤 위치에서 자를지는 모두 Bonny가 정할 수 있다.

각 칸에 들어 있는 건포도의 개수가 주어질 때, 모든 칸을 1×11 \times 1 조각으로 나누기 위해 Bonny가 지불해야 하는 건포도 개수의 최솟값을 구하여라.

입력

  • 첫째 줄에 초콜릿의 크기 NN과 MM이 주어진다.
  • 이어지는 NN개의 줄에는 각각 MM개의 정수 RijR_{ij}가 주어진다. RijR_{ij}는 ii행 jj열 칸에 들어 있는 건포도의 개수이다.
  • 1≤N,M≤501 \le N, M \le 50
  • 1≤Rij≤10001 \le R_{ij} \le 1000

출력

Bonny가 지불해야 하는 건포도 개수의 최솟값을 한 줄에 출력한다.

힌트

이 문제는 부분 직사각형에 대한 구간 동적 계획법으로 풀 수 있다. 한 직사각형 조각을 한 번 자르는 비용은 그 조각에 들어 있는 건포도의 총합이고, 잘린 두 조각은 서로 독립적으로 다시 나눌 수 있다. 따라서 크기가 작은 직사각형부터 '완전히 1×11 \times 1 조각으로 나누는 최소 비용'을 차례로 채워 나가면 전체 답을 구할 수 있다.

예제3

  1. 예제 1

    입력
    2 3
    2 7 5
    1 9 5
    
    예상 출력
    77
    
  2. 예제 2

    입력
    1 1
    5
    
    예상 출력
    0
    
  3. 예제 3

    입력
    1 2
    3 4
    
    예상 출력
    7