For Programmer

백준 13910번 파이썬 문제풀이(개업) 본문

코팅테스트/백준 문제 모음

백준 13910번 파이썬 문제풀이(개업)

유지광이 2022. 4. 21. 21:45
728x90


간단한 DP문제이다. 약간 웰노운이라 쉽게 풀 수 있었다. 최대 2개만 고를 수 있기 때문에 실버이지 않나 생각해본다. 이 중반복문을 돌면서 한개 뽑았을때 2개뽑았을 때 나눠서 생각하면 쉽게 풀 수 있다.

 

import sys

sys.setrecursionlimit(10000)
input = sys.stdin.readline
N, M = map(int, input().split())
w_size = list(map(int, input().split()))

dp = [1 << 30] * (N + 1)


def recur(total):
    if total < 0:
        return 10000000
    elif total == 0:
        return 0

    if dp[total] != 1 << 30:
        return dp[total]

    for i in range(M):
        dp[total] = min(dp[total], recur(total - w_size[i]) + 1)
        for j in range(i + 1, M):
            dp[total] = min(dp[total], recur(total - w_size[i] - w_size[j]) + 1)

    return dp[total]


ans = recur(N)
if ans >= 10000000:
    print(-1)
else:
    print(ans)
728x90
Comments