public static int CoinChange(int[] coins, int amount) {
int[] dp = new int[amount + 1];
for(int i=0; i<= amount; i++)
for(int sum = 1; sum <= amount; sum++)
foreach(int coin in coins)
dp[sum] = Math.Min(dp[sum], dp[sum-coin] + 1);
return dp[amount] == (amount + 1) ? -1 : dp[amount];
public static void Main()
int result = CoinChange(new int[]{1, 2, 5}, 11);
Console.WriteLine(result);