<?php
error_reporting(-1);
$amount = 54500; //требуемая сумма
$bills  = array(
    100 => 23,
    500 => 5,
    1000 => 0,
    5000 => 200
); //запас наличных

function giveMeMyMoney($amount, $array, $bill)
  {
    static $quantity = "Выдача возможна, число купюр:\n";
    $needed = floor($amount / $bill);
    if ($needed <= $array[$bill])
      {
        $amount -= $needed * $bill;
        $quantity .= "{$needed}x$bill ";
      }
    else
      {
        $amount -= $array[$bill] * $bill;
        $quantity .= "{$array[$bill]}x$bill ";
      }
    
    if ($bill == 5000)
        giveMeMyMoney($amount, $array, 1000);
    elseif ($bill == 1000)
        giveMeMyMoney($amount, $array, 500);
    elseif ($bill == 500)
        giveMeMyMoney($amount, $array, 100);
    elseif ($bill == 100 && $amount > 0)
        echo "Выдача невозможна: недостаточно купюр.";
    else
        echo $quantity;
  }
echo "Сумма: {$amount}\n";
if ($amount <= 100)
    echo "Выдача невозможна: слишком маленькое число.";
elseif (($amount % 100) != 0)
    echo "Выдача невозможна: сумма не кратна 100.";
else
    giveMeMyMoney($amount, $bills, 5000);