<?php
function constructGraph($bills, $amount){
global $topsOut, $topsIncluded, $weights;
foreach($bills as $nomination => $quantity){
do{
if(($amount-$nomination)>=0 && ($bills[$nomination] - 1)>=0){
$amount = $amount - $nomination;
$bills[$nomination]--;
if($amount==0){
return;
}
}
}while($bills[$nomination]>0 && ($amount-$nomination)>=0);
}
}
// $amount = 54500;
// $bills = array(
// 5000 => 200,
// 1000 => 0,
// 500 => 5,
// 100 => 23
// );
$amount = 66600;
50000 => 2,
20000 => 3,
5000 => 1,
2000 => 4,
500 => 1,
200 => 3
);
// $amount = 24;
// $bills = array(
// 10 => 1,
// 5 => 5,
// 1 => 5
// );
// $amount = 8;
// $bills = array(
// 9 => 1,
// 4 => 1,
// 2 => 5
// );
$amountSave = $amount;
foreach($bills as $nomination => $quantity){
if(($amount-$nomination)>=0 && ($bills[$nomination] - 1)>=0){
$bills[$nomination]--;
constructGraph($bills, $amount-$nomination);
}
}
$result[$weights[$num]]++;
if($num){
$n = $topsOut[$num];
while($topsOut[$num]!=$amountSave){
$num--;
$result[$weights[$num]]++;
}
}
$resultStr = "";
foreach ($result as $key => $value) {
if($value != 0){
$resultStr = $resultStr."{$value}x{$key} ";
}
}
echo $resultStr."\n";
?>
PD9waHAKCWVycm9yX3JlcG9ydGluZygtMSk7CgltYl9pbnRlcm5hbF9lbmNvZGluZygndXRmLTgnKTsKCQoJZnVuY3Rpb24gY29uc3RydWN0R3JhcGgoJGJpbGxzLCAkYW1vdW50KXsKCQlnbG9iYWwgJHRvcHNPdXQsICR0b3BzSW5jbHVkZWQsICR3ZWlnaHRzOwoJCWZvcmVhY2goJGJpbGxzIGFzICRub21pbmF0aW9uID0+ICRxdWFudGl0eSl7CgkJCWRvewoJCQkJaWYoKCRhbW91bnQtJG5vbWluYXRpb24pPj0wICYmICgkYmlsbHNbJG5vbWluYXRpb25dIC0gMSk+PTApewoJCQkJCWFycmF5X3B1c2goJHRvcHNPdXQsICRhbW91bnQpOwoJCQkJCWFycmF5X3B1c2goJHRvcHNJbmNsdWRlZCwgJGFtb3VudC0kbm9taW5hdGlvbik7CgkJCQkJYXJyYXlfcHVzaCgkd2VpZ2h0cywgJG5vbWluYXRpb24pOwoJCQkJCSRhbW91bnQgPSAkYW1vdW50IC0gJG5vbWluYXRpb247CgkJCQkJJGJpbGxzWyRub21pbmF0aW9uXS0tOwoJCQkJCWlmKCRhbW91bnQ9PTApewoJCQkJCQlyZXR1cm47CgkJCQkJfQoJCQkJfQoJCQl9d2hpbGUoJGJpbGxzWyRub21pbmF0aW9uXT4wICYmICgkYW1vdW50LSRub21pbmF0aW9uKT49MCk7CgkJfQoJfQoJCgkvLyAkYW1vdW50ID0gNTQ1MDA7CgkvLyAkYmlsbHMgPSBhcnJheSgKCQkvLyA1MDAwID0+IDIwMCwKCQkvLyAxMDAwID0+IDAsCgkJLy8gNTAwID0+IDUsCgkJLy8gMTAwID0+IDIzCgkvLyApOwoJCgkkYW1vdW50ID0gNjY2MDA7CgkkYmlsbHMgPSBhcnJheSgKCQk1MDAwMCA9PiAyLAoJCTIwMDAwID0+IDMsCgkJNTAwMCA9PiAxLAoJCTIwMDAgPT4gNCwKCQk1MDAgPT4gMSwKCQkyMDAgPT4gMwoJKTsKCQoJLy8gJGFtb3VudCA9IDI0OwoJLy8gJGJpbGxzID0gYXJyYXkoCgkJLy8gMTAgPT4gMSwKCQkvLyA1ID0+IDUsCgkJLy8gMSA9PiA1CgkvLyApOwoJCgkvLyAkYW1vdW50ID0gODsKCS8vICRiaWxscyA9IGFycmF5KAoJCS8vIDkgPT4gMSwKCQkvLyA0ID0+IDEsCgkJLy8gMiA9PiA1CgkvLyApOwoJCiAgICAkdG9wc091dCA9IGFycmF5KCk7CiAgICAkdG9wc0luY2x1ZGVkID0gYXJyYXkoKTsKICAgICR3ZWlnaHRzID0gYXJyYXkoKTsKCSRyZXN1bHQgPSBhcnJheV9maWxsX2tleXMoYXJyYXlfa2V5cygkYmlsbHMpLCAwKTsKCSRhbW91bnRTYXZlID0gJGFtb3VudDsKCQoJZm9yZWFjaCgkYmlsbHMgYXMgJG5vbWluYXRpb24gPT4gJHF1YW50aXR5KXsKCQlpZigoJGFtb3VudC0kbm9taW5hdGlvbik+PTAgJiYgKCRiaWxsc1skbm9taW5hdGlvbl0gLSAxKT49MCl7CgkJCWFycmF5X3B1c2goJHRvcHNPdXQsICRhbW91bnQpOwoJCQlhcnJheV9wdXNoKCR0b3BzSW5jbHVkZWQsICRhbW91bnQtJG5vbWluYXRpb24pOwoJCQlhcnJheV9wdXNoKCR3ZWlnaHRzLCAkbm9taW5hdGlvbik7CgkJCSRiaWxsc1skbm9taW5hdGlvbl0tLTsKCQkJY29uc3RydWN0R3JhcGgoJGJpbGxzLCAkYW1vdW50LSRub21pbmF0aW9uKTsKCQl9Cgl9CgkKCSRudW0gPSBhcnJheV9zZWFyY2goMCwgJHRvcHNJbmNsdWRlZCk7CgkkcmVzdWx0WyR3ZWlnaHRzWyRudW1dXSsrOwoJaWYoJG51bSl7CgkJJG4gPSAkdG9wc091dFskbnVtXTsKCQl3aGlsZSgkdG9wc091dFskbnVtXSE9JGFtb3VudFNhdmUpewoJCQkkbnVtLS07CgkJCSRyZXN1bHRbJHdlaWdodHNbJG51bV1dKys7CgkJfQoJfQoJCgkkcmVzdWx0U3RyID0gIiI7Cglmb3JlYWNoICgkcmVzdWx0IGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJaWYoJHZhbHVlICE9IDApewoJCQkkcmVzdWx0U3RyID0gJHJlc3VsdFN0ci4ieyR2YWx1ZX14eyRrZXl9ICI7CgkJfQoJfQoJZWNobyAkcmVzdWx0U3RyLiJcbiI7Cj8+