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 JAVA (judge verdict: Accepted)

import java.util.Scanner;
class CoinChangingProblem {
    public int count (int n, int[] coins) {
	int m = coins.length;
	int[] dp = new int[n+1];
	for (int i = 1; i <= n; i++) {
	    dp[i] = 50000;
	}

	for (int i = 0; i < m; i++) {
	    for (int j = coins[i]; j <= n; j++) {
		dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);
	    }
	}
	return dp[n];
    }
}

public class Main {
    public static void main (String[] args) {
	Scanner scan = new Scanner(System.in);
	String[] input;
	input = scan.nextLine().split(" ");
	int n = Integer.parseInt(input[0]);
	int m = Integer.parseInt(input[1]);
	int[] coins = new int[m];
	input = scan.nextLine().split(" ");
	for (int i = 0; i < m; i++) {
	    coins[i] = Integer.parseInt(input[i]);
	}
	CoinChangingProblem problem = new CoinChangingProblem();
	System.out.println(problem.count(n, coins));
    }
}