ACM준비/algospot

COINS

조규현15 2015. 9. 9. 15:41
반응형

https://algospot.com/judge/problem/read/COINS

 

algospot.com :: COINS

Coin Change 문제 정보 문제 우리 나라에는 10원, 50원, 100원, 500원의 네 가지 동전이 있다. (1원짜리와 5원짜리는 거의 안 쓰니까 없는 걸로 하지요) 이 동전들을 이용해 110원을 거슬러 주는 방법은 몇

algospot.com

DP문제임.

최대 M값이 5000이므로 모든 경우의 수를 계산하여 품.

가장 작은 동전의 종류부터 DP배열에 더해감.

DP배열은 이전에 계산된 DP배열 값에 새로 추가된 동전 DP값을 더하여 만듬.

 

#define MAX_COIN 5000
using namespace std;

int main()
{
	int T;
	for (scanf("%d", &T); T > 0; T--)
	{
		int M, C;
		vector CA;
		//DP
		long long DP_C[MAX_COIN + 1] = { 0, };
		scanf("%d %d", &M, &C);
		for (int i = 0; i < C; i++){
			int V;
			scanf("%d", &V);
			CA.push_back(V);
		}
		sort(CA.begin(), CA.end());

		for (int i = 0; i < C; i++)
		{
			int currentCoin = CA[i];
			if (currentCoin > M) break;
			++DP_C[currentCoin];

			for (int j = 1; currentCoin + j <= M; j++)
			{
				if (DP_C[j] >= 1)
					DP_C[j + currentCoin] += DP_C[j];
			}
		}
		printf("%lld\n", DP_C[M] % (long long)1000000007);
	}
	return 0;
}
반응형

'ACM준비 > algospot' 카테고리의 다른 글

FIXPAREN  (0) 2015.09.10
POTION  (0) 2015.09.10
INSERTION  (0) 2015.09.08
QUADTREE  (0) 2015.08.24
GRID  (0) 2015.08.18