Tengo problemas para encontrar la última sección de código para un problema de cambio de moneda dinámica. He incluido el código a continuación.Programación dinámica: cambio
No puedo entender el último else
. ¿Debería usar el algoritmo codicioso en ese punto o puedo calcular la respuesta a partir de los valores que ya figuran en la tabla? He trabajado duro para tratar de entender este problema y creo que estoy bastante cerca. El método encuentra la cantidad mínima de monedas necesarias para hacer una cierta cantidad de cambios creando una tabla y usando los resultados que están almacenados en la tabla para resolver el problema más grande sin usar la recursión.
public static int minCoins(int[] denom, int targetAmount){
int denomPosition; // Position in denom[] where the first spot
// is the largest coin and includes every coin
// smaller.
int currentAmount; // The Amount of money that needs to be made
// remainingAmount <= initalAmount
int[][] table = new int[denom.length][targetAmount+1];
for(denomPosition = denom.length-1 ; denomPosition >= 0 ; denomPosition--) {
for(currentAmount = 0 ; currentAmount <= targetAmount ; currentAmount++){
if (denomPosition == denom.length-1){
table[denomPosition][currentAmount] =
currentAmount/denom[denomPosition];
}
else if (currentAmount<denom[denomPosition]){
table[denomPosition][currentAmount] =
table[denomPosition+1][currentAmount];
}
else{
table[denomPosition][currentAmount] =
table[denomPosition+1][currentAmount]-
table[denomPosition][denom[denomPosition]]-1;
}
}
}
return table[0][targetAmount];
}
This El método funciona pero no ayuda a mi comprensión del problema si usted u otra persona pudieran comentar las líneas clave del código. Veo los bucles for para la denomPosition y el currentAmount, pero luego pierde todo parecido a mi programa original. Gracias por tu ayuda. –
Mi implementación se basa en el problema "Hacer cambios" explicado en [aquí] (http://people.csail.mit.edu/bdean/6.046/dp/), debe quedar claro después de ver el video en el enlace –