GRID//RUNNER

COIN CHANGE MEDIUM

problema

Você recebe os valores das moedas disponíveis em moedas e um valor alvo A. Existe uma quantidade ilimitada de cada moeda. Retorne o menor número de moedas cuja soma dá exatamente A. Se não houver como formar o valor, retorne -1.

Exemplo 1 · moedas = [1, 3, 4], A = 6 → 2

3 + 3 = 6. O guloso (sempre a maior moeda que cabe) erra: 4 + 1 + 1 usa 3 moedas. Por isso precisamos de DP.

Exemplo 2 · moedas = [2], A = 3 → -1

Só com moedas de 2 nunca se chega a um valor ímpar.

Exemplo 3 · moedas = [1], A = 0 → 0

O valor 0 já está formado sem nenhuma moeda.

Restrições: 1 ≤ moedas.length ≤ 12 · 1 ≤ moedas[i] ≤ 2³¹ − 1 · 0 ≤ A ≤ 10⁴