Study hard

(c++)백준 2293번: 동전 1 본문

백준/DP

(c++)백준 2293번: 동전 1

Nimgnoej 2020. 9. 16. 11:27

www.acmicpc.net/problem/2293

 

2293번: 동전 1

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

www.acmicpc.net

[풀이]

DP로 풀 수 있는 문제였다.

DP[x] : 가치의 합이 x가 되는 경우의 수

점화식

if coin[i]<=j : DP[j] += DP[j-coin[i]]

 

#include <iostream>
#include <cstring>//memset
using namespace std;

int n, k;
int coin[101];
int DP[10001] = { 0, };

int solution() {
	DP[0] = 1;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= k; j++) {
			//이번 차례에 i번째 동전을 쓸 수 있는 경우의 수 더하기
			if (coin[i] <= j)
				DP[j] += DP[j - coin[i]];
		}
	}
	return DP[k];
}

int main() {
	cin >> n >> k;
	for (int i = 1; i <= n; i++) {
		cin >> coin[i];
	}
	cout << solution() << '\n';
	return 0;
}

 

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

(c++)백준 11058번: 크리보드  (0) 2020.09.16
(c++)백준 2294번: 동전 2  (0) 2020.09.16
(c++)백준 10422번: 괄호  (0) 2020.09.16
(c++)백준 12869번: 뮤탈리스크  (0) 2020.09.15
(c++)백준 1459번: 기타리스트  (0) 2020.09.15