본문 바로가기
문제 해결/BOJ

[백준] 비즈 공예

by 자잘 2023. 4. 24.

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