article thumbnail image
Published 2021. 8. 4. 22:12

문제 설명

문제 링크

http://icpc.me/9084

 

9084번: 동전

우리나라 화폐단위, 특히 동전에는 1원, 5원, 10원, 50원, 100원, 500원이 있다. 이 동전들로는 정수의 금액을 만들 수 있으며 그 방법도 여러 가지가 있을 수 있다. 예를 들어, 30원을 만들기 위해서는

www.acmicpc.net

풀이

dp로 풀이할 수 있다.

dp정의는 dp[남은 돈][몇 번째 동전까지 썼는지]로 정의할 수 있다.

코드

#include <cstdio>
#include <cstring>

int dp[10004][22], arr[10004], n;


int dpf(int money, int coin_idx) {
    int &ret = dp[money][coin_idx];
    if (ret) return ret;
    if (!money) return 1;
    for (int i = coin_idx; i < n; i++) {
        if (money - arr[i] >= 0) ret += dpf(money - arr[i], i);
    }
    return ret;
}

void solve() {
    memset(dp, 0, sizeof dp);
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", arr + i);
    }
    int m; scanf("%d", &m);
    printf("%d\n", dpf(m, 0));    
}

int main() {
    int t; scanf("%d", &t);
    while (t--) solve();
}

'Algorithm > BOJ' 카테고리의 다른 글

백준[5557] 1학년  (0) 2021.08.04
백준[2225] 합분해  (0) 2021.08.04
백준[1915] 가장 큰 정사각형  (0) 2021.08.04
백준[2602] 돌다리 건너기  (0) 2021.08.03
백준 [11280] 2-SAT - 3  (0) 2021.08.02
복사했습니다!