Question

Problème: étant donné un ensemble de n pièces de valeurs faciales uniques et une valeur change, trouver un nombre de façons de changer change.

En supposant que nous pouvons utiliser une dénomination plus d'une fois, voici le pseudocode que j'ai trouvé

1. NUM-WAYS(denom[], n, change)
2.   dp = [change + 1][n + 1]
3.   for i = 0 to n
4      dp[i][0] = 1
5.   xs = denom.sorted

6.   for i = 1 to change
7.     for j = 1 to n
8.       if xs[j - 1] > i
9.         dp[i][j] = dp[i][j - 1]
10.      else
11.        dp[i][j] = dp[i - xs[j - 1]][j] + dp[i][j - 1]

12.  return dp[change][n]

L'algorithme ci-dessus est clair pour moi. Cependant, si nous ne sommes autorisés à utiliser une dénomination qu'une seule fois, alors la ligne 11 passe à dp[i - xs[j - 1]][j - 1] + dp[i][j - 1], comme si nous n'étions pas du tout autorisés à utiliser la dénomination actuelle. Je n'arrête pas à envelopper ma tête. Pouvez-vous expliquer cela?

Voici quelques essais:

Change: 3, denominations: [8, 3, 1, 2]
11111
01111
01222
01233

// use once
Change: 3, denominations: [8, 3, 1, 2]
11111
01111
00111
00122

Change: 4, denominations: [3, 1, 2]
1111
0111
0122
0123
0134

// use once
Change: 4, denominations: [3, 1, 2]
1111
0111
0011
0012
0001

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top