https://www.acmicpc.net/problem/2293
2293번: 동전 1
첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다.
www.acmicpc.net
문제 풀이
DP문제라는걸 고려하고 문제 해결 방법을 고민하니 답이 금방 나왔다.
새롭게 경우의 수가 추가되는 경우를 생각해보니, dp[n] + dp[n - 현재 사용한 동전의 종류 크기] 를 하면 새로운 dp[n] 값이 나온다.
우리가 궁금한 값은 dp[k] 이므로 dp[k]까지 배열을 돌려주면 된다.
소스 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> coin;
int dp[10001] = { 0 };
int main() {
int n, k;
cin >> n >> k;
for (int i = 0; i < n; i++) {
int c;
cin >> c;
coin.push_back(c);
}
sort(coin.begin(), coin.end());
dp[0] = 1;
for (int i = 0; i < n; i++) {
int start = coin[i];
for (int j = start; j <= k; j++) {
dp[j] += dp[j - coin[i]];
}
}
cout << dp[k] << '\n';
}
'알고리즘' 카테고리의 다른 글
[백준] 26111번 Parentheses Tree C++ 문제풀이 (0) | 2023.09.22 |
---|---|
[백준] 15486번 퇴사 2 C++ 문제풀이 (0) | 2023.09.15 |
[백준] 11053번 가장 긴 증가하는 부분 수열 C++ 문제풀이 (0) | 2023.09.13 |
[백준] 1149번 RGB거리 C++ 문제풀이 (0) | 2023.09.12 |
[백준] 9466번 텀 프로젝트 C++ 문제풀이 (0) | 2023.09.11 |