Torna alle sfide
Media 0 risolte 0% di accettazione

Conta le Combinazioni di Monete

Conta i modi per ottenere un importo usando un numero illimitato di monete di denominazioni specificate.

Cosa imparerai

  • Contare combinazioni, non ordinamenti
  • Scorrere le monete nel ciclo esterno
  • Costruire un array DP 1D dei modi

Problema

Usa qualsiasi numero di ciascuna denominazione fornita per ottenere esattamente l'importo richiesto. Conta le combinazioni, non le disposizioni: due modi che usano lo stesso numero di ciascuna moneta sono considerati uguali. Le denominazioni sono distinte e positive.

Implementa coin_sums(amount, coins).

Input

amount: L'importo totale da ottenere.

coins: Le denominazioni distinte disponibili.

Output

Restituisci il numero di combinazioni non ordinate.

Vincoli

0 ≤ amount ≤ 200. Ci sono da 0 a 10 denominazioni distinte, ciascuna compresa tra 1 e 200. Tutti i conteggi rientrano in un intero con segno a 64 bit. Per amount 0 esiste un solo modo: non scegliere nessuna moneta.

Esempi

Esempio 1
Input:
coins = [1, 2]
amount = 4

Output atteso:
expected = 3
Input:
std::vector<long long> coins = {1, 2};
long long amount = 4;

Output atteso:
long long expected = 3;
Input:
long[] coins = new long[] {1, 2};
long amount = 4;

Output atteso:
long expected = 3;

Spiegazione

Le combinazioni sono quattro monete da 1, due monete da 1 con una da 2, e due monete da 2.

Esempio 2
Input:
coins = [2]
amount = 3

Output atteso:
expected = 0
Input:
std::vector<long long> coins = {2};
long long amount = 3;

Output atteso:
long long expected = 0;
Input:
long[] coins = new long[] {2};
long amount = 3;

Output atteso:
long expected = 0;

Spiegazione

Qualsiasi somma di monete da 2 è pari, quindi 3 è impossibile.

Come affrontarlo

Prova prima da solo, poi apri un suggerimento alla volta.

Suggerimento 1

L’ordine delle monete non conta, quindi le combinazioni vanno contate per denominazione, non per permutazione.

Suggerimento 2

Costruisci il numero di modi per ogni importo in modo incrementale, lasciando che ogni moneta contribuisca a tutti i totali raggiungibili.

Suggerimento 3

Fai attenzione all’importo zero, che ha sempre un solo modo valido: non scegliere nessuna moneta.

Complessità attesa

tempo O(amount × number_of_coins), spazio aggiuntivo O(amount)

Riferimenti

Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.

Impara dagli altri

Soluzioni della community

Nessuna soluzione pubblicata. Risolvi questa sfida per condividere la prima.