Жадный метод (классический пример статьи)

Идеи : стратегия оптимальна продолжает выбирать ток

Разница : разговаривали с на другое динамическом программировании, динамическое программирование при выборе оптимального решения в различных стратегиях, и жадной только одна стратегии.

Пример а :

Монета вопрос
 

Описание

 

Есть $ 1, $ 5, $ 10, $ 50, $ 100, $ 500 каждая монета С1, С5, С10, С50, С100, C500 шт. Теперь использовать эти монеты, чтобы заплатить за Юань, сколько монет требует минимума? (С учетом некоторых разрешимыми.)

 

вход

 

Входной содержащее множество наборов тестовых примеров для каждого теста:

Целое число входных 7, первые шесть Ки целое число, представляющее число шести видов монет, а затем ввести целое число A (0 <= Ci <= 109,1 <= А <= 109).

 

Выход

 

Выход требует минимального количества монет.

 

Пример ввода 1

3 2 1 3 0 2 620

Пример вывода 1

6

намек

5 юаней две монеты, одна 10 монет, 50 монет 2 500 монета.

Идеи: предыдущая проблема монета (насколько это возможно использование больших номиналов монет) отличаются, предыдущую тему, которая не ограничивается числом каждой монеты (в то время идея заключается в том, чтобы поместить каждую купюру ку [], циркуляционного обход, каждая операция: = текущее количество монет денежных центов на доллар, текущая сумма денег, - = количество монет автоматической смены выключен), и это ограничивает количество монет, означает, что количество монет, которые будут погашены в соответствии с первоначальной номинальной стоимостью монеты количество изменений.

#include <iostream> 
#include <cstdio> 
#include <алгоритм> 
#include <CMATH> 
#include < строка > 
#include <CString>
 с использованием  пространства имен STD;
Int основных () {
     INT ку [ 6 ] = { 1 , 5 , 10 , 50 , 100 , 500 };
    INT Num [ 6 ];
    в то время как (CIN >> Num [ 0 ]) {
         для ( INT I =1 ; г < 6 ; я ++ ) { 
            CIN >> Num [I]; 
        } 
        ИНТ деньги; 
        CIN >> деньги;
        INT CNT = 0 ;
        для ( Int I = 5 ; я> = 0 ; i-- ) {
             INT т = мин (Num [I], деньги / ку [I]); 
            деньги - = т * ка [я]; 
            CNT + = т; 
        } 
        СоиЬ << CNT << епсИ; 
    } 
    Вернуться  0; 
}
Просмотр кода

Два примера :

Interval проблемы

 

рекомендация

отwww.cnblogs.com/nibaba131237/p/12359342.html
рекомендация