Der Versuch, eine DP-Lösung für das allgemeine Münzwechsel-Problem zu programmieren, die auch verfolgt, welche Münzen verwendet werden. Bis jetzt habe ich es geschafft, um mir die minimale Menge an Münzen zu geben, aber ich kann nicht herausfinden, wie man welche Münzen benutzt und wie oft. Ich habe versucht, eine andere Tabelle (boolean) mit Werten einzurichten, wenn die Münze verwendet wird, aber das scheint nicht richtig zu funktionieren. Irgendwelche Ideen?Münzwechsel-DP-Lösung zum Nachverfolgen von Münzen
public static int minChange(int[] denom, int changeAmount)
{
int m = denom.length;
int n = changeAmount + 1;
int[][] table = new int[m][n];
boolean[][] used = new boolean[m][n];
for (int j = 0; j < n; j++)
table[m - 1][j] = j;
for (int i = 0; i < m; i++)
table[i][0] = 0;
for (int i = m-2; i >= 0; i--) //i denotes denominationIndex
{
for (int j = 1; j < n; j++) //j denotes current Amount
{
if (denom[i] > j)
{
table[i][j] = table[i+1][j];
//used[i][j] = false;
}
else
{
table[i][j] = Math.min(1 + table[i][j-denom[i]], table[i+1][j]);
/*Trying table for used coins
if (1 + table[i][j-denom[i]] < table[i+1][j])
used[i][j] = true;
else
used[i][j] = false;
*/
}
}
}
}
Wenn Sie eine Frage stellen, _ „nicht richtig funktionieren“ _ ist in der Regel unzureichend. Bitte erläutern Sie, was passiert und wie sich das von dem unterscheidet, was Sie erwarten. –
Was ist Tabelle [i] [j]? –
Wenn ich sage, dass es nicht richtig funktioniert, meine ich, dass der Tisch mich in Bereichen wahr macht, die nicht Teil der Mindestmünzenantwort sind. Zum Beispiel, wenn ich es mit 4 Münzen mit dem Nennwert 10, 7, 6, 1 für eine Änderung von insgesamt 14 laufen lasse, gibt mir die boolesche Tabelle für 7 und 6 den Wert wahr, wenn es nur für die 7 wahr geben soll. –