-문제: https://www.acmicpc.net/problem/2294

동전단위 열부터 시작하기, dp구성하는 값 least upper bound로 설정하기

-정답풀이: 

n,k=map(int,input().split())
coins=[]
for _ in range(n):
    coins.append(int(input()))
dp=[10001]*(k+1)
dp[0]=0

for i in coins:
    for j in range(i,k+1):
        dp[j]=min(dp[j],dp[j-i]+1)
        
if dp[k]==10001:
    print(-1)
else:
    print(dp[k])

-시도한 풀이:

이게 왜 안되는지 잘 모르겠다. python tutor를 돌린 결과 예시는 일단 잘 돌아가는데,,

j의 범위가 달라서 틀린 것 같기도하고,,,

왜 틀렸는지 잘 모르겠네

n,k=map(int,input().split())
coins=[]
for _ in range(n):
    coins.append(int(input()))
dp=[0]*(k+1)

for i in coins:
    for j in range(1,k+1):
        if j%i ==0:
            dp[j]= j//i
        elif j>i:
            dp[j]=min(dp[j],dp[j%i]+(j//i))
if dp[k]==0:
    print(-1)
else:
    print(dp[k])

'백준 > DP' 카테고리의 다른 글

[dp/백준] 1309번: 동물원  (0) 2022.06.17
[dp/백준] 2225번: 합분해  (0) 2022.06.16
[dp/백준] 1520번: 내리막길  (0) 2022.06.13
[dp/백준] 11048번: 이동하기  (0) 2022.06.13
[dp/백준] 2133번: 타일 채우기  (0) 2022.06.11

+ Recent posts