Study hard
(c++)백준 2293번: 동전 1 본문
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 |