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

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

사탕 줍기 대회

시간 제한1초메모리 제한256 MB

요약
M행 N열 격자에서 위아래나 좌우로 맞닿지 않도록 상자를 골라 얻을 수 있는 사탕 개수의 최댓값을 구한다.
난이도

보통10점 중 7점

유형
동적 계획법, 그리디, 배열, 행렬
정답자
아직 제출이 없습니다

문제

상근이는 사탕을 무척 좋아하는 아이다. 상근이는 캔디 매거진의 열렬한 구독자이며, 올해 열리는 국제 사탕 줍기 대회에 한국 대표로 참가하게 되었다.

이 대회는 사탕이 든 박스가 MM행 NN열로 놓인 곳에서 진행된다. 따라서 박스는 모두 M×NM \times N개 있고, 각 박스의 겉면에는 그 안에 든 사탕의 개수가 적혀 있다.

참가자는 박스를 하나 고르고, 그 박스에 든 사탕을 모두 가져간다. 어떤 박스를 고르면 다음 위치에 있는 박스의 사탕이 모두 사라진다.

  • 고른 박스의 바로 윗행에 있는 모든 박스
  • 고른 박스의 바로 아랫행에 있는 모든 박스
  • 같은 행에서 고른 박스의 바로 왼쪽에 있는 박스와 바로 오른쪽에 있는 박스

참가자는 사탕이 남아 있는 박스가 하나도 없을 때까지 계속해서 박스를 고를 수 있다.

MM과 NN, 그리고 각 박스에 든 사탕의 개수가 주어졌을 때, 상근이가 가져갈 수 있는 사탕의 최대 개수를 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫째 줄에는 두 정수 MM과 NN이 주어진다 (1≤M×N≤1051 \le M \times N \le 10^5). 이어지는 MM개 줄에는 각 줄마다 그 행에 놓인 박스 NN개에 든 사탕의 개수가 공백으로 구분되어 주어진다. 각 박스에 든 사탕의 개수는 11 이상 10310^3 이하이다.

입력의 마지막 줄에는 00이 두 개 주어지며, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 상근이가 가져갈 수 있는 사탕의 최대 개수를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    5 5
    1 8 2 1 9
    1 7 3 5 2
    1 2 10 3 10
    8 4 7 9 1
    7 1 3 1 6
    4 4
    10 1 1 10
    1 1 1 1
    1 1 1 1
    10 1 1 10
    2 4
    9 10 2 7
    5 1 1 5
    0 0
    
    예상 출력
    54
    40
    17