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: Memory Limit Exceeded)

using System;
using System.Linq;
using System.Collections.Generic;


public class CoinChanging
{
    public static void Main()
    {
        var inputs = Console.ReadLine().Split(' ').Select(int.Parse);
        var n = inputs.First();
        
        var coins = Console.ReadLine().Split(' ').Select(int.Parse);
        
        var totals = coins.ToList();
        var count = 1;
        
        var max = coins.Max();
        
        while (totals.All(x => x != n))
        {
            count++;
            
            totals = totals.SelectMany(x => 
            {
                return n - x > max * 2
                    ? new int[] { x + max }
                    : coins.Select(y => x + y);
            }).ToList();
            totals.RemoveAll(x => x > n);
        }
    
        Console.WriteLine(count);
    
    }
}

// Define other methods and classes here