알고리즘

[C++] 백준 2293번 동전1

J3SUNG 2019. 5. 22. 22:57
728x90

 

다이나믹 프로그래밍 문제입니다.

 

1부터 n까지 차례대로 진행하며

현재 위치의 저장값에 검사하고 있는 코인만큼 인덱스를 뺀 위치의 값을 더해줍니다.

 

=>

for (int k = 0; k < coinNum; ++k) {
 	for (int j = coin[k]; j <= findCoin; ++j) {
 		memo[j] += memo[j - coin[k]];
 	}
}

 

#include <iostream>
using namespace std;

int memo[10010];
int coin[10010];


void init()
{
   for (int i = 0; i < 10010; ++i) {
      memo[i] = 0;
      coin[i] = 0;
   }
}

int main(int argc, char *argv[])
{
   init();
   int coinNum = 0;
   int findCoin;
   memo[0] = 1;
   cin >> coinNum;
   cin >> findCoin;
   for (int j = 0; j < coinNum; ++j) {
      cin >> coin[j];
   }
   for (int k = 0; k < coinNum; ++k) {
      for (int j = coin[k]; j <= findCoin; ++j) {
         memo[j] += memo[j - coin[k]];
      }
   }
   cout << memo[findCoin] << endl;
   return 0;
}