practivceAlgorithm/swexpertacademy

[SWEA][Python] 1486 장훈이의 높은 선반

findTheValue 2021. 10. 8. 12:38

dfs로 백트래킹하며 최솟값을 갱신해주는 로직입니다. 높이가 '이상' 임이 명확히 주어져있어서 수월했습니다.

 

def dfs(u, total):
    global min_val
    if total >= B:
        min_val = min(min_val, total)
    for v in range(u + 1, N):
        if not visited[v] and total + s[v] < min_val:
            visited[v] = True
            dfs(v, total + s[v])
            visited[v] = False


for test in range(1, int(input()) + 1):
    N, B = map(int, input().split())
    s = list(map(int, input().split()))
    visited = [False] * N
    min_val = float('inf')
    for start in range(N):
        visited[start] = True
        dfs(start, s[start])
        visited[start] = False
    print(f'#{test} {min_val - B}')