테트로미노 두 개 놓기

N×M 격자에 겹치지 않게 테트로미노 두 개를 놓을 때, 덮인 칸에 적힌 수의 합이 최대가 되도록 한다.

어려움8완전 탐색동적 계획법구현아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

폴리오미노는 크기가 1×11 \times 1인 정사각형을 여러 개 이어 붙인 도형이고, 다음 조건을 모두 만족한다.

  • 정사각형끼리 겹치지 않는다.
  • 도형 전체가 하나로 연결되어 있다.
  • 정사각형은 변끼리 맞닿아 연결된다. 꼭짓점만 맞닿은 것은 연결로 보지 않는다.

정사각형 4개를 이어 붙인 폴리오미노를 테트로미노라고 하며, 아래 5가지가 있다.

다섯 가지 테트로미노

아름이는 크기가 N×MN \times M인 종이 위에 테트로미노 두 개를 놓으려고 한다. 두 테트로미노는 서로 겹치면 안 된다. 종이는 1×11 \times 1 크기의 칸으로 나뉘어 있고, 각 칸에는 정수가 하나씩 쓰여 있다.

테트로미노를 놓을 때는 정사각형 하나가 칸 하나를 정확히 덮어야 하고, 회전이나 대칭을 시켜도 된다.

테트로미노 두 개를 놓아서 덮인 칸에 쓰인 수의 합을 최대로 만드는 프로그램을 작성하시오.

입력

첫째 줄에 종이의 세로 크기 NN과 가로 크기 MM이 주어진다. (4N,M5004 \le N, M \le 500)

둘째 줄부터 NN개의 줄에 종이에 쓰인 수가 주어진다. ii번째 줄의 jj번째 수는 위에서 ii번째, 왼쪽에서 jj번째 칸에 쓰인 수이다. 주어지는 수는 1,000을 넘지 않는 자연수이다.

출력

첫째 줄에 테트로미노 두 개가 덮은 칸에 쓰인 수의 합의 최댓값을 출력한다.