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: Accepted)

using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        new Program().Solve();
    }

    int[] coins;
    int[,] memo = new int[21, 50001];

    void Solve()
    {
        int[] nm = Console.ReadLine().Split().Select(s => int.Parse(s)).ToArray();
        int n = nm[0];
        coins = Console.ReadLine().Split().Select(s => int.Parse(s)).ToArray();
        Console.WriteLine(Solve(0, n));
    }

    int Solve(int i, int x)
    {
        if (i == coins.Length)
        {
            return x == 0 ? 0 : 1000000;
        }
        if (memo[i, x] > 0)
        {
            return memo[i, x];
        }
        int ans = Solve(i + 1, x);
        if (x >= coins[i])
        {
            ans = Math.Min(ans, Solve(i, x - coins[i]) + 1);
        }
        return memo[i, x] = ans;
    }
}