Исплата
Аутор: Марко Савић
Текст и тест примери: Алекса Милисављевић
Анализа решења: Никола Јовановић
Тестер: Александар Златески
Анализа
Уочимо да ћемо за фиксно k и скуп \{1 \cdot 10^k, 2 \cdot 10^k, 5 \cdot 10^k\} у оптималном решењу искористити:
- највише једну новчаницу типа 1 \cdot 10^k (две 1 \cdot 10^k се могу заменити једном 2 \cdot 10^k);
- највише једну новчаницу типа 5 \cdot 10^k (две 5 \cdot 10^k се могу заменити једном 1 \cdot 10^{k+1});
- највише две новчанице типа 2 \cdot 10^k (три 2 \cdot 10^k се могу заменити једном 1 \cdot 10^k и једном 5 \cdot 10^k), а ако искористимо барем две тада не користимо 1 \cdot 10^k (две 2 \cdot 10^k и једна 1 \cdot 10^k се могу заменити једном 5 \cdot 10^k).
Одавде следи да у оптималном решењу нема преноса, тј. ако представимо V=c_n 10^n + c_{n-1} 10^{n-1} + \dots + c_0 10^0, новчанице типа d \cdot 10^k користимо само како бисмо се решили члана c_k 10^k. Дакле, оптимално решење добијамо проласком кроз V цифру-по-цифру и сабирањем минималног броја новчаница типа d \cdot 10^k чији је збир c_k \cdot 10^k. На пример, за c_k=7 бирамо скуп \{5 \cdot 10^{k}, 2 \cdot 10^{k}\} што додаје 2 на коначан резултат. Све вредности минималног броја новчаница за c_k \in \{0,\dots9\} се лако могу израчунати: [0, 1, 1, 2, 2, 1, 2, 2, 3, 3].
Овај задатак је специјалан случај change making проблема. За скуп новчаница дат у овом задатку, greedy приступ (поновљено бирање највредније новчанице која нема вредност већу од преостале суме) дао би оптимално решење, еквивалентно горе описаном. Ипак, овај приступ није оптималан за све скупове новчаница, па се овај проблем у општем случају решава методом динамичког програмирања.