Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

MG

[백준] 2293 - 동전 1 본문

컴퓨터과학/알고리즘_PS

[백준] 2293 - 동전 1

MG# 2022. 5. 10. 01:09

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

 

2293번: 동전 1

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

www.acmicpc.net

배낭문제와 유사한 풀이방식이다. dp[k]는 k원이 되는 동전의 구성 경우의 수이다. 이를 중복없이 계산하기 위해서 1번째 동전을 1~k원까지 채워넣고 그리고 2번째, 3번째 ... n번째 동전까지 경우의 수를 고려한다. 그렇게 되면 j번째 동전에서 그 전 동전이 이미 반영이 다 되고 더 이상 반영이 안되기에 중복이 안되게 된다. 그래서 dp[j]에 dp[j - arr[i]] 를 계속 더해주고 dp[k]를 출력하면 답이다.

#include <iostream>
using namespace std;

int dp[10001];
int arr[101];
int n, k;

int main() {

    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> k;
    for (int i = 1; i <= n; i++)
        cin >> arr[i];

    dp[0] = 1;

    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= k; j++)
            if (j >= arr[i])
                dp[j] += dp[j - arr[i]];

    cout << dp[k] << "\n";
    return 0;
}

'컴퓨터과학 > 알고리즘_PS' 카테고리의 다른 글

[백준 / C++] 5557 - 1학년  (0) 2022.05.17
[백준] 1043 - 거짓말  (0) 2022.05.16
[백준] 2156 - 포도주 시식  (0) 2022.05.06
[백준] 2407 - 조합  (0) 2022.05.05
[백준] 2294 - 동전 2  (0) 2022.05.04