<?php
header('Content-Type: text/plain; charset=UTF-8');
$amount = 1600;
5000 => 2,
2000 => 1,
1000 => 1,
500 => 1,
200 => 4,
100 => 0
);
function foo ($amount, $bills, $billUsed=NULL, $result=NULL)
{
$paid = 0;
$remain = $amount;
$k = 0;
foreach ($bills as $billValue => $billAmount) {
if ($billValue > $amount || $billAmount == 0 || (isset($billUsed[$billValue]) && $billUsed[$billValue] == TRUE)) { continue;
}
$billPaymentAmount = floor($remain / $billValue);
if ($billPaymentAmount == 0) {
continue;
}
if ($billPaymentAmount > $billAmount) {
$billPaymentAmount = $billAmount;
}
$remain -= $billPaymentAmount * $billValue;
$billUsed[$billValue] = TRUE;
$billKeys[] = $billValue;
$k++;
$result[] = "$billPaymentAmount x $billValue";
}
if ($remain != 0) {
$l = $k - 1;
$remain += $billKeys[$l];
foo($remain, $bills, $billUsed, $result);
}
}
foo($amount, $bills);
PD9waHAKCgpoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCcpOwoKJGFtb3VudCA9IDE2MDA7CgokYmlsbHMgPSBhcnJheSgKICAgIDUwMDAgICAgPT4gMiwKICAgIDIwMDAgICAgPT4gMSwKICAgIDEwMDAgICAgPT4gMSwKICAgIDUwMCAgICAgPT4gMSwKICAgIDIwMCAgICAgPT4gNCwKICAgIDEwMCAgICAgPT4gMAopOwoKZnVuY3Rpb24gZm9vICgkYW1vdW50LCAkYmlsbHMsICRiaWxsVXNlZD1OVUxMLCAkcmVzdWx0PU5VTEwpCnsKCiAgICAkcGFpZCA9IDA7CiAgICAkcmVtYWluID0gJGFtb3VudDsKICAgICRrID0gMDsKICAgICRiaWxsS2V5cyA9IGFycmF5KCk7CiAgICAKICAgIGZvcmVhY2ggKCRiaWxscyBhcyAkYmlsbFZhbHVlID0+ICRiaWxsQW1vdW50KSB7CgogICAgICAgIGlmICgkYmlsbFZhbHVlID4gJGFtb3VudCB8fCAkYmlsbEFtb3VudCA9PSAwIHx8IChpc3NldCgkYmlsbFVzZWRbJGJpbGxWYWx1ZV0pICYmICRiaWxsVXNlZFskYmlsbFZhbHVlXSA9PSBUUlVFKSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgICRiaWxsUGF5bWVudEFtb3VudCA9IGZsb29yKCRyZW1haW4gLyAkYmlsbFZhbHVlKTsKCiAgICAgICAgaWYgKCRiaWxsUGF5bWVudEFtb3VudCA9PSAwKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRiaWxsUGF5bWVudEFtb3VudCA+ICRiaWxsQW1vdW50KSB7CiAgICAgICAgICAgICRiaWxsUGF5bWVudEFtb3VudCA9ICRiaWxsQW1vdW50OwogICAgICAgIH0KCiAgICAgICAgJHJlbWFpbiAtPSAkYmlsbFBheW1lbnRBbW91bnQgKiAkYmlsbFZhbHVlOwoKICAgICAgICAkYmlsbFVzZWRbJGJpbGxWYWx1ZV0gPSBUUlVFOwogICAgICAgICRiaWxsS2V5c1tdID0gJGJpbGxWYWx1ZTsKICAgICAgICAkaysrOwoKICAgICAgICAkcmVzdWx0W10gPSAiJGJpbGxQYXltZW50QW1vdW50IHggJGJpbGxWYWx1ZSI7CgogICAgfQoKICAgIGlmICgkcmVtYWluICE9IDApIHsKICAgICAgICBhcnJheV9wb3AoJHJlc3VsdCk7CiAgICAgICAgJGwgPSAkayAtIDE7CiAgICAgICAgJHJlbWFpbiArPSAkYmlsbEtleXNbJGxdOwogICAgICAgIGZvbygkcmVtYWluLCAkYmlsbHMsICRiaWxsVXNlZCwgJHJlc3VsdCk7CiAgICB9Cgp2YXJfZHVtcCgkcmVzdWx0KTsKfQoKZm9vKCRhbW91bnQsICRiaWxscyk7