https://www.acmicpc.net/problem/1301
1301번: 비즈 공예
첫째 줄에 다솜이가 가지고 있는 구슬의 종류 N이 주어진다. N은 3보다 크거나 같고, 5보다 작거나 같다. 둘째 줄부터 N개의 줄에 각각의 구슬이 총 몇 개 있는 지주어진다. 첫째 줄에는 1번 구슬,
www.acmicpc.net
import sys
#sys.stdin = open("input.txt", "r")
input = sys.stdin.readline
n = int(input())
marble = [0] * 6
for i in range(n):
marble[i] = int(input())
dp = [
[[[[[[-1 for _ in range(6)]
for __ in range(6)]
for ___ in range(11)]
for ____ in range(11)]
for _____ in range(11)]
for ______ in range(11)]
for _______ in range(11)
]
total = sum(marble)
def recur_dp(cnt, prev_color, cur_color):
if cnt == total:
return 1
val = dp[marble[0]][marble[1]][marble[2]][marble[3]][marble[4]][prev_color][cur_color]
if val != -1:
return val
ret = 0
for i in range(n):
if i == prev_color or i == cur_color or marble[i] == 0:
continue
marble[i] -= 1
ret += recur_dp(cnt + 1, cur_color, i)
marble[i] += 1
dp[marble[0]][marble[1]][marble[2]][marble[3]][marble[4]][prev_color][cur_color] = ret
return ret
# 아무 관련 없는 색상을 넣어준다.
print(recur_dp(0, 5, 5))
'문제 해결 > BOJ' 카테고리의 다른 글
[백준] 파티 (0) | 2023.04.26 |
---|---|
[백준] Guess (0) | 2023.04.25 |
[백준] 불우이웃돕기 (0) | 2023.04.23 |
[백준] 박스 채우기 (0) | 2023.04.22 |
[백준] 내리막 길 (0) | 2023.04.21 |