알고리즘/다이나믹프로그래밍

[c++][백준2293][백준 동전1][dp]

leo_____lee 2019. 2. 10. 17:55

문제

풀이 방법

겹치면 안된다. 따라서 다음과 같이 풀었다.(예제 입력인 3-10, 1,2,5로 설명)

1.전부 1로 채우는 경우

2.전부 1로 채우는 경우에 무조건 '2'가 한개 이상 들어가는 경우

3.전부 1,2로 채우는 경우에 무조건 '3'이 한개 이상 들어가는 경우

3까지 가면 완료이다!

코드

#include <iostream>
using namespace std;
int main()
{
    unsigned int dp[10001] = {0,};
    int arr[100] = { 0, };
    int n, k,x=0,y=1,r=0;
    cin >> n >> k;
    for (int i = 0; i < n; i++) cin >> arr[i];
    dp[0] = 1;
    for (int i = 0; i < n; i++) {
        for (int j = arr[i]; j <=k; j++) {
            dp[j] += dp[j - arr[i]];
        }
    }
cout << dp[k]<<endl;
    return 0;
}