Динамическое программирование - внесение изменений

У меня проблемы с выяснением моего последнего раздела кода для задачи динамического обмена монет. Я добавил код ниже.

Я не могу определить последний , еще . Должен ли я просто использовать жадный алгоритм на этом этапе или я могу рассчитать ответ на основе значений, уже имеющихся в таблице? Я много работал, пытаясь понять эту проблему, и я думаю, что я довольно близок. Метод находит минимальное количество монет, необходимое для внесения определенного количества изменений, путем создания таблицы и использования результатов, которые хранятся в таблице, для решения более крупной проблемы без использования рекурсии.

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];
}
6
задан Degustaf 31 January 2015 в 22:46
поделиться