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

{-# LANGUAGE BangPatterns #-}
import Control.Applicative ((<$>))
import Data.Array (listArray, (!))
import Data.List (sort)

main :: IO ()
main = do
    [n,m] <- getInts
    cs <- getInts
    print $ solve n m $ sort cs

getInts :: IO [Int]
getInts = map read . words <$> getLine

solve :: Int -> Int -> [Int] -> Int
solve n m cs = table (n,m-1)
    where
        idx (!x,!y) = x + y*(n+1)
        xdi i = let x = i`mod`(n+1)
                    y = i`div`(n+1)
                 in x `seq` y `seq` (x,y)
        table = (listArray (0,idx (n,m-1)) (map (f.xdi) [0..idx (n,m-1)]) !) . idx
        f (!x,0) = x
        f (!x,!y) = if c > x then table (x,y-1)
                             else let res1 = table (x,y-1)
                                      res2 = table (x-c,y) + 1
                                   in res1 `seq` res2 `seq` min res1 res2
            where c = cs !! y