오랜만에 풀었네 훌찌락,,
import sys
input=sys.stdin.readline
N,M=map(int,input().split())
box=[list(map(int,input().split())) for _ in range(N)]
#visited=[[False]*M for _ in range(N)]
def dfs(mino,sum):
global max_num
dx=[-1,0,+1,0]
dy=[0,-1,0,+1]
if len(mino)==4:
for m in mino: print(m,box[m[0]][m[1]])
max_num=max(max_num,sum)
print(max_num)
else:
x,y=mino[-1]
for i in range(4):
nx=x+dx[i]; ny=y+dy[i];
if [nx,ny] not in mino and (-1<nx<N and -1<ny<M):
mino.append([nx,ny])
dfs(mino,sum+box[nx][ny])
mino.pop()
if len(mino)==3:
x,y=mino[1] # 중앙
for i in range(4):
nx=x+dx[i]; ny=y+dy[i];
if [nx,ny] not in mino and (-1<nx<N and -1<ny<M):
mino.append([nx,ny])
dfs(mino,sum+box[nx][ny])
mino.pop()
max_num=0
for i in range(N):
for j in range(M):
#visited[i][j]=True
dfs([[i,j]],box[i][j])
print(max_num)
import sys; input = sys.stdin.readline
def dfs(r, c, idx, total):
global ans
if ans >= total + max_val * (3 - idx):
return
if idx == 3:
ans = max(ans, total)
return
else:
for i in range(4):
nr = r + dr[i]
nc = c + dc[i]
if 0 <= nr < N and 0 <= nc < M and visit[nr][nc] == 0:
if idx == 1:
visit[nr][nc] = 1
dfs(r, c, idx + 1, total + arr[nr][nc])
visit[nr][nc] = 0
visit[nr][nc] = 1
dfs(nr, nc, idx + 1, total + arr[nr][nc])
visit[nr][nc] = 0
N, M = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
visit = [([0] * M) for _ in range(N)]
dr = [-1, 0, 1, 0]
dc = [0, 1, 0, -1]
ans = 0
max_val = max(map(max, arr))
for r in range(N):
for c in range(M):
visit[r][c] = 1
dfs(r, c, 0, arr[r][c])
visit[r][c] = 0
print(ans)