fork(1) download
  1. <?php
  2.  
  3.  
  4. $amount = 740;
  5.  
  6. $bills = array(
  7. 10 => 10,
  8. 50 => 10,
  9. 100 => 10,
  10. 500 => 10,
  11. );
  12.  
  13. $keysBills = array_keys($bills);
  14.  
  15. $attempts = 0;
  16.  
  17. function countBillsSum($billsCopy) {
  18.  
  19. $valuesBillsCopy = array_values($billsCopy);
  20. $keysBillsCopy = array_keys($billsCopy);
  21.  
  22. for($i = 0; $i < count($billsCopy); $i++) {
  23. $result[$i] = $valuesBillsCopy[$i] * $keysBillsCopy[$i];
  24. }
  25. $result = array_sum($result);
  26. return $result;
  27. }
  28.  
  29. function findChange($amount, $keysBills, $bills, $billNumber) {
  30.  
  31. echo "start $billNumber";
  32.  
  33. global $attempts;
  34.  
  35. $currentBill = $keysBills[$billNumber];
  36.  
  37. $currentMaxBills = min(floor($amount / $keysBills[$billNumber]), $bills[$currentBill]);
  38.  
  39. for ($i = $currentMaxBills; $i >= 0; $i--) {
  40.  
  41. echo "$i\n";
  42.  
  43. $attempts++;
  44. $billsCopy = $bills;
  45. $billsCopy[$currentBill] = $i;
  46.  
  47. if ($billNumber > 0) {
  48. findChange($amount, $keysBills, $billsCopy, $billNumber - 1);
  49. } elseif (countBillsSum($billsCopy) == $amount) {
  50. echo implode(", ", array_values($billsCopy))."\n";
  51. break;
  52. }
  53. }
  54. echo "end\n";
  55. return;
  56. }
  57.  
  58. echo findChange($amount, $keysBills, $bills, 3);
  59.  
  60. //echo selectMinimumBillsArray(findChange($amount, $keysBills, $bills, 0, array()));
  61.  
  62. echo "\n".$attempts;
Success #stdin #stdout 0.03s 20568KB
stdin
Standard input is empty
stdout
start 31
start 27
start 110
start 010
9
8
7
6
5
4
3
2
1
0
end
9
start 010
9
8
7
6
5
4
3
2
1
0
end
8
start 010
9
8
7
6
5
4
3
2
1
0
end
7
start 010
9
8
7
6
5
4
3
2
1
0
end
6
start 010
9
8
7
6
5
4
3
2
1
0
end
5
start 010
9
8
7
6
5
4
3
2
1
0
end
4
start 010
9
8
7
6
5
4
3
2
1
0
end
3
start 010
9
8
7
6
5
4
3
2
1
0
end
2
start 010
9
8
7
6
5
4
3
2
1
0
end
1
start 010
9
8
7
6
5
4
3
2
1
0
end
0
start 010
9
8
7
6
5
4
3
2
1
0
end
end
6
start 110
start 010
9
8
7
6
5
4
3
2
1
0
end
9
start 010
9
8
7
6
5
4
3
2
1
0
end
8
start 010
9
8
7
6
5
4
3
2
1
0
end
7
start 010
9
8
7
6
5
4
3
2
1
0
end
6
start 010
9
8
7
6
5
4
3
2
1
0
end
5
start 010
9
8
7
6
5
4
3
2
1
0
end
4
start 010
9
8
7
6
5
4
3
2
1
0
end
3
start 010
9
8
7
6
5
4
3
2
1
0
end
2
start 010
9
8
7
6
5
4
3
2
1
0
end
1
start 010
9
8
7
6
5
4
3
2
1
0
end
0
start 010
9
8
7
6
5
4
3
2
1
0
end
end
5
start 110
start 010
9
8
7
6
5
4
3
2
1
0
end
9
start 010
9
8
7
6
5
4
3
2
1
0
end
8
start 010
9
8
7
6
5
4
3
2
1
0
end
7
start 010
9
8
7
6
5
4
3
2
1
0
end
6
start 010
9
8
7
6
5
4
3
2
1
0
end
5
start 010
9
8
7
6
5
4
3
2
1
0
end
4
start 010
9
8
7
6
5
4
3
2
1
0
end
3
start 010
9
8
7
6
5
4
3
2
1
0
end
2
start 010
9
8
7
6
5
4
3
2
1
0
end
1
start 010
9
8
7
6
5
4
3
2
1
0
end
0
start 010
9
8
7
6
5
4
3
2
1
0
end
end
4
start 110
start 010
9
8
7
6
5
4
3
2
1
0
end
9
start 010
9
8
7
6
5
4
3
2
1
0
end
8
start 010
9
8
7
6
5
4
3
2
1
0
end
7
start 010
9
8
7
6
5
4
3
2
1
0
end
6
start 010
9
8
7
6
5
4
3
2
1
0
end
5
start 010
9
8
7
6
5
4
3
2
1
0
end
4
start 010
9
8
7
6
5
4
3
2
1
0
end
3
start 010
9
8
7
6
5
4
3
2
1
0
end
2
start 010
9
8
7
6
5
4
3
2
1
0
end
1
start 010
9
8
7
6
5
4
3
2
1
0
end
0
start 010
9
8
7
6
5
4
3
2
1
0
end
end
3
start 110
start 010
9
8
7
6
5
4
3
2
1
0
end
9
start 010
9
8
7
6
5
4
3
2
1
0
end
8
start 010
9
8
7
6
5
4
3
2
1
0
end
7
start 010
9
8
7
6
5
4
3
2
1
0
end
6
start 010
9
8
7
6
5
4
3
2
1
0
end
5
start 010
9
8
7
6
5
4
3
2
1
0
end
4
start 010
9
8
7
6
5
4
3
2
1
0
end
3
start 010
9
8
7
6
5
4
3
2
1
0
end
2
start 010
9
8
7
6
5
4
3
2
1
0
end
1
start 010
9
8
7
6
5
4
3
2
1
0
end
0
start 010
9
8
7
6
5
4
3
2
1
0
end
end
2
start 110
start 010
9
8
7
6
5
4
3
2
1
0
end
9
start 010
9
8
7
6
5
4
3
2
1
0
end
8
start 010
9
8
7
6
5
4
3
2
1
0
end
7
start 010
9
8
7
6
5
4
3
2
1
0
end
6
start 010
9
8
7
6
5
4
3
2
1
0
end
5
start 010
9
8
7
6
5
4
3
2
1
0
end
4
start 010
9
8
7
6
5
4
3
2
1
0
end
3
start 010
9
8
7
6
5
4
3
2
1
0
end
2
start 010
9
8
7
6
5
4
3
2
1
0
end
1
start 010
9
8
7
6
5
4
3
2
1
0
end
0
start 010
9
8
7
6
5
4
4, 0, 2, 1
end
end
1
start 110
start 010
9
8
7
6
5
4
3
2
1
0
end
9
start 010
9
8
7
6
5
4
3
2
1
0
end
8
start 010
9
8
7
6
5
4
3
2
1
0
end
7
start 010
9
8
7
6
5
4
3
2
1
0
end
6
start 010
9
8
7
6
5
4
3
2
1
0
end
5
start 010
9
8
7
6
5
4
3
2
1
0
end
4
start 010
9
8
7
6
5
4
3
2
1
0
end
3
start 010
9
8
7
6
5
4
3
2
1
0
end
2
start 010
9
8
7
6
5
4
4, 2, 1, 1
end
1
start 010
9
9, 1, 1, 1
end
0
start 010
9
8
7
6
5
4
3
2
1
0
end
end
0
start 110
start 010
9
8
7
6
5
4
3
2
1
0
end
9
start 010
9
8
7
6
5
4
3
2
1
0
end
8
start 010
9
8
7
6
5
4
3
2
1
0
end
7
start 010
9
8
7
6
5
4
3
2
1
0
end
6
start 010
9
8
7
6
5
4
3
2
1
0
end
5
start 010
9
8
7
6
5
4
3
2
1
0
end
4
start 010
9
8
7
6
5
4
4, 4, 0, 1
end
3
start 010
9
9, 3, 0, 1
end
2
start 010
9
8
7
6
5
4
3
2
1
0
end
1
start 010
9
8
7
6
5
4
3
2
1
0
end
0
start 010
9
8
7
6
5
4
3
2
1
0
end
end
end
0
start 27
start 110
start 010
9
8
7
6
5
4
3
2
1
0
end
9
start 010
9
8
7
6
5
4
3
2
1
0
end
8
start 010
9
8
7
6
5
4
3
2
1
0
end
7
start 010
9
8
7
6
5
4
3
2
1
0
end
6
start 010
9
8
7
6
5
4
3
2
1
0
end
5
start 010
9
8
7
6
5
4
3
2
1
0
end
4
start 010
9
8
7
6
5
4
3
2
1
0
end
3
start 010
9
8
7
6
5
4
3
2
1
0
end
2
start 010
9
8
7
6
5
4
3
2
1
0
end
1
start 010
9
8
7
6
5
4
3
2
1
0
end
0
start 010
9
8
7
6
5
4
4, 0, 7, 0
end
end
6
start 110
start 010
9
8
7
6
5
4
3
2
1
0
end
9
start 010
9
8
7
6
5
4
3
2
1
0
end
8
start 010
9
8
7
6
5
4
3
2
1
0
end
7
start 010
9
8
7
6
5
4
3
2
1
0
end
6
start 010
9
8
7
6
5
4
3
2
1
0
end
5
start 010
9
8
7
6
5
4
3
2
1
0
end
4
start 010
9
8
7
6
5
4
3
2
1
0
end
3
start 010
9
8
7
6
5
4
3
2
1
0
end
2
start 010
9
8
7
6
5
4
4, 2, 6, 0
end
1
start 010
9
9, 1, 6, 0
end
0
start 010
9
8
7
6
5
4
3
2
1
0
end
end
5
start 110
start 010
9
8
7
6
5
4
3
2
1
0
end
9
start 010
9
8
7
6
5
4
3
2
1
0
end
8
start 010
9
8
7
6
5
4
3
2
1
0
end
7
start 010
9
8
7
6
5
4
3
2
1
0
end
6
start 010
9
8
7
6
5
4
3
2
1
0
end
5
start 010
9
8
7
6
5
4
3
2
1
0
end
4
start 010
9
8
7
6
5
4
4, 4, 5, 0
end
3
start 010
9
9, 3, 5, 0
end
2
start 010
9
8
7
6
5
4
3
2
1
0
end
1
start 010
9
8
7
6
5
4
3
2
1
0
end
0
start 010
9
8
7
6
5
4
3
2
1
0
end
end
4
start 110
start 010
9
8
7
6
5
4
3
2
1
0
end
9
start 010
9
8
7
6
5
4
3
2
1
0
end
8
start 010
9
8
7
6
5
4
3
2
1
0
end
7
start 010
9
8
7
6
5
4
3
2
1
0
end
6
start 010
9
8
7
6
5
4
4, 6, 4, 0
end
5
start 010
9
9, 5, 4, 0
end
4
start 010
9
8
7
6
5
4
3
2
1
0
end
3
start 010
9
8
7
6
5
4
3
2
1
0
end
2
start 010
9
8
7
6
5
4
3
2
1
0
end
1
start 010
9
8
7
6
5
4
3
2
1
0
end
0
start 010
9
8
7
6
5
4
3
2
1
0
end
end
3
start 110
start 010
9
8
7
6
5
4
3
2
1
0
end
9
start 010
9
8
7
6
5
4
3
2
1
0
end
8
start 010
9
8
7
6
5
4
4, 8, 3, 0
end
7
start 010
9
9, 7, 3, 0
end
6
start 010
9
8
7
6
5
4
3
2
1
0
end
5
start 010
9
8
7
6
5
4
3
2
1
0
end
4
start 010
9
8
7
6
5
4
3
2
1
0
end
3
start 010
9
8
7
6
5
4
3
2
1
0
end
2
start 010
9
8
7
6
5
4
3
2
1
0
end
1
start 010
9
8
7
6
5
4
3
2
1
0
end
0
start 010
9
8
7
6
5
4
3
2
1
0
end
end
2
start 110
start 010
9
8
7
6
5
4
4, 10, 2, 0
end
9
start 010
9
9, 9, 2, 0
end
8
start 010
9
8
7
6
5
4
3
2
1
0
end
7
start 010
9
8
7
6
5
4
3
2
1
0
end
6
start 010
9
8
7
6
5
4
3
2
1
0
end
5
start 010
9
8
7
6
5
4
3
2
1
0
end
4
start 010
9
8
7
6
5
4
3
2
1
0
end
3
start 010
9
8
7
6
5
4
3
2
1
0
end
2
start 010
9
8
7
6
5
4
3
2
1
0
end
1
start 010
9
8
7
6
5
4
3
2
1
0
end
0
start 010
9
8
7
6
5
4
3
2
1
0
end
end
1
start 110
start 010
9
8
7
6
5
4
3
2
1
0
end
9
start 010
9
8
7
6
5
4
3
2
1
0
end
8
start 010
9
8
7
6
5
4
3
2
1
0
end
7
start 010
9
8
7
6
5
4
3
2
1
0
end
6
start 010
9
8
7
6
5
4
3
2
1
0
end
5
start 010
9
8
7
6
5
4
3
2
1
0
end
4
start 010
9
8
7
6
5
4
3
2
1
0
end
3
start 010
9
8
7
6
5
4
3
2
1
0
end
2
start 010
9
8
7
6
5
4
3
2
1
0
end
1
start 010
9
8
7
6
5
4
3
2
1
0
end
0
start 010
9
8
7
6
5
4
3
2
1
0
end
end
0
start 110
start 010
9
8
7
6
5
4
3
2
1
0
end
9
start 010
9
8
7
6
5
4
3
2
1
0
end
8
start 010
9
8
7
6
5
4
3
2
1
0
end
7
start 010
9
8
7
6
5
4
3
2
1
0
end
6
start 010
9
8
7
6
5
4
3
2
1
0
end
5
start 010
9
8
7
6
5
4
3
2
1
0
end
4
start 010
9
8
7
6
5
4
3
2
1
0
end
3
start 010
9
8
7
6
5
4
3
2
1
0
end
2
start 010
9
8
7
6
5
4
3
2
1
0
end
1
start 010
9
8
7
6
5
4
3
2
1
0
end
0
start 010
9
8
7
6
5
4
3
2
1
0
end
end
end
end

2031