문제
https://www.acmicpc.net/problem/14500
14500번: 테트로미노
폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변
www.acmicpc.net
코드
import sys
input=sys.stdin.readline
dx=[-1,1,0,0]
dy=[0,0,-1,1]
n,m=map(int, input().split())
array=[list(map(int, input().split())) for _ in range(n)]
visited=[[0]*m for _ in range(n)]
max_val =max(map(max,array)) #전체 중 가장 큰 값
result=0
def dfs(r,c,count,total):
global result
#가지치기
# 현재의 dfs에서 남은 블록이 모두 최대라도 result를 못 넘기면 return
if result>=total + max_val* (3-count):
return
if count==3:
if result<total:
result=total
return
for i in range(4):
nx=r+dx[i]
ny=c+dy[i]
if 0<=nx<n and 0<=ny<m and visited[nx][ny]==0:
#ㅗ 부분 처리를 위해
if count==1:
visited[nx][ny] = 1
dfs(r, c, count + 1,total+array[nx][ny])
visited[nx][ny] = 0
visited[nx][ny]=1
dfs(nx,ny,count+1,total+array[nx][ny])
visited[nx][ny] = 0
for i in range(n):
for j in range(m):
visited[i][j]=1
dfs(i,j,0,array[i][j])
visited[i][j]=0
print(result)
'문제풀이 > DFS & BFS' 카테고리의 다른 글
[PyPy] [BFS] 백준 9019 DSLR (0) | 2022.05.26 |
---|---|
[PyPy] [DFS] 백준 15684 사다리 조작 (0) | 2022.05.19 |
[파이썬] [BFS] 백준 1707 이분 그래프 (0) | 2022.05.11 |
[파이썬] [DFS] 백준 1068 트리 (0) | 2022.05.11 |
[PyPy] [DFS] 백준 2580 스도쿠 (0) | 2022.05.05 |