Problem Solving
[BOJ] (BIT, BF)14391번 종이 조각 ★★
주씨.
2022. 2. 6. 14:19
728x90
일단 배열을 어떻게 저렇게 가로 세로로 칸을 나누는지 감을 못잡았다
2차원 배열을 1차원 배열로 풀어서, 각 요소마다 인덱스를 부여.
가로방향을 1, 세로방향을 0이라고 생각하면, 총 경우의 수는 2의n*m제곱.
1과0으로 표현할 거니까 비트마스킹을 이용하여 저장.
인덱스 k = i*m + j이고, 이 k번째 요소가 0인지 1인지 확인하려면 b&(1<<k) == 0 이용
now = now*10 + arr[i][j] 을 이용해서 수 합치기
n, m = map(int, input().split())
arr = []
for _ in range(n):
arr.append(list(map(int, list(input()))))
ans = 0
for b in range(1<<m*n):
_sum = 0
# 가로 0 세로 1
#가로방향
for i in range(n):
now = 0
for j in range(m):
k = i*m + j
if b&(1<<k) == 0:
now = now*10 + arr[i][j]
else:
_sum += now
now = 0
_sum += now
# 세로 방향
for j in range(m):
now = 0
for i in range(n):
k = i*m + j
if b&(1<<k) != 0:
now = now*10 + arr[i][j]
else:
_sum += now
now = 0
_sum += now
ans = max(ans, _sum)
print(ans)
https://www.acmicpc.net/problem/14391
14391번: 종이 조각
영선이는 숫자가 쓰여 있는 직사각형 종이를 가지고 있다. 종이는 1×1 크기의 정사각형 칸으로 나누어져 있고, 숫자는 각 칸에 하나씩 쓰여 있다. 행은 위에서부터 아래까지 번호가 매겨져 있고,
www.acmicpc.net