Problem:
Coin Changing Problem

Find the minimum number of coins to make change for n cents using coins of denominations d1, d2,.., dm. The coins can be used any number of times.

Input

n m
d1 d2 ... dm

Two integers n and m are given in the first line. The available denominations are given in the second line.

Output

Print the minimum number of coins in a line.

Constraints

1 ≤ n ≤ 50000

1 ≤ m ≤ 20

1 ≤ denomination ≤ 10000

The denominations are all different and contain 1.

Sample Input 1

55 4
1 5 10 50

Sample Output 1

2

Sample Input 2

15 6
1 2 7 8 12 50

Sample Output 2

2

Sample Input 3

65 6
1 2 7 8 12 50

Sample Output 3

3

Solution in C (judge verdict: Time Limit Exceeded)

// coin mondai

#include<stdio.h>
#include<stdlib.h>

int c[20]; // ?????¢

int countit(int n,int m){
	int unchi, i;
	int min_unchi=999999;
	for(i=0;i<m;i++){
		if(n-c[i]>0){
			unchi = countit(n-c[i],i+1)+1;
		}else if(n-c[i]==0){
			unchi = 1;
		}else{
			unchi=99999;
		}
		if(min_unchi>unchi){min_unchi=unchi;}
	}
	return min_unchi;
}

int main(void){
	int n, m, i;
	scanf("%d %d", &n, &m);
	for(i=0;i<m;i++){
		scanf("%d", &c[i]);
	}
	// sort
	int tmp;
	int kaeritai,monosugokukaeritai;
	for(kaeritai=0;kaeritai<m;kaeritai++){
		for(monosugokukaeritai=kaeritai;monosugokukaeritai<m;monosugokukaeritai++){
			if(c[kaeritai]>c[monosugokukaeritai]){
				tmp = c[kaeritai];
				c[kaeritai] = c[monosugokukaeritai];
				c[monosugokukaeritai] = tmp;
			}
		}
	}
	// ??????
	int unchi;
	unchi = countit(n,m);
	printf("%d\n", unchi);
	return 0;
}