반응형

https://www.acmicpc.net/problem/2294

 

2294번: 동전 2

첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주

www.acmicpc.net

 

dp[i]는 i원을 만들 수 있는 최소 동전의 개수입니다.

초기에 제시된 동전의 가치로는, 각 가치의 동전을 1개로 만들 수 있습니다.

k <= 10000 이므로, 동전의 가치가 10000원을 넘어간다면, 굳이 저장을 안해줬습니다.

dp[i]는 현재까지 가능한 최소 동전의 개수로 계속 업데이트해주었습니다.

 

#include <algorithm>
#include <iostream>
#define INF 987654321
using namespace std;
int n, k, a, dp[10001] = { 0 };
int main() {
	scanf("%d %d", &n, &k);
	while (n-- && scanf("%d", &a)) 
		if(a < 10001) dp[a] = 1;
	for (int i = 1; i <= k; i++) {
		if(!dp[i]) dp[i] = INF;
		for (int j = 1; j <= i / 2; j++)
			dp[i] = min(dp[i], dp[j] + dp[i - j]);
	}
	printf("%d", dp[k] != INF ? dp[k] : -1);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 11058 : 크리보드  (0) 2021.11.12
백준 9202 : Boggle  (0) 2021.11.12
백준 15989 : 1, 2, 3 더하기 4  (0) 2021.11.12
백준 1890 : 점프  (0) 2021.11.12
백준 8112 : 0과 1 - 2  (0) 2021.11.12

+ Recent posts