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: Wrong Answer)

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

int com(const void*a,const void*b){
	if( *(int*)a>*(int*)b ){
		return 1;
	}
	else if( *(int*)a==*(int*)b ){
		return 0;
	}
	else{
		return -1;
	}
}


int main(){
	int n,m;//n:支払う額,m:硬貨の種類
	scanf("%d %d",&n,&m);
	int data[m];
	int i,j;
	for(i=0;i<m;i++){
		scanf("%d",&data[i]);
	}
	qsort((void*)data,m,sizeof(data[0]),com);
	int dp[n+1][m];
	for(i=0;i<m;i++){
		for(j=0;j<=n;j++){
			dp[j][i]=0;
		}
	}
	if(data[0]==1){
		for(i=1;i<=n;i++){
			dp[i][0]=i;
		}
	}
	else{
		printf("error!");
		return 0;
	}
	int a;//比較用に使用
	for(i=1;i<m;i++){//i番目の硬貨
		for(j=1;j<=n;j++){//j円に必要な枚数
			a=(j/data[i])+dp[j%data[i]][i-1];//i番目の硬貨を使うなら
			dp[j][i]=dp[j][i-1]>a?a:dp[j][i-1];
		}
	}
	printf("%d\n",dp[n][m-1]);
	return 0;
}