첫 번째 줄에 정사각형 화단의 한 변의 길이가 주어짐
두 번째 줄부터 N+1번째 줄까지 각 픽셀 마다의 cost값이 주어짐
3개의 꽃을 심을 수 있는 최소한의 cost를 출력
최대 10x10인 경우이기 때문에 모든 경우의 수를 돌며 최소의 합을 구한다. => dfs를 이용한 풀이
dx = [0, -1, 0, 1, 0]
dy = [0, 0, -1, 0, 1]
for y in range(1, N-1):
for x in range(1, N-1):
tmp = 0
for idx in range(5): tmp += _map[y+dy[idx]][x+dx[idx]]
sum_map[y][x] = tmp
def dfs(start, cnt, cost):
global visited, ans, dx, dy, N, sum_map
if cnt == 3: ans = min(ans, cost)
else:
for y in range(start, N-1):
for x in range(1, N-1):
flag = True
for idx in range(5):
if visited[y+dy[idx]][x+dx[idx]]:
flag = False
break
if flag:
for idx in range(5): visited[y+dy[idx]][x+dx[idx]] = True
dfs(start, cnt+1, cost+sum_map[y][x])
for idx in range(5): visited[y+dy[idx]][x+dx[idx]] = False