<?php
//Сколько выдать
$input = 54500;

//Купюры в наличии
$bills = array(
    100 => 23,
    500 => 5,
    1000 => 0,
    5000 => 200
);
$bills = array_reverse($bills, true);
//Количество выданных купюр
$issued = array(
    100 => 0,
    500 => 0,
    1000 => 0,
    5000 => 0
);
$money = $input;
$error = '';

if ($input < 0) {
    $error = 'Сумма меньше нуля';
} elseif (($input % 100) != 0) {
    $error = 'Число не кратно ста';
} else {
    foreach ($bills as $bill => $count) {
        $issued[$bill] = min(floor($money / $bill), $count);
        $money -= ($issued[$bill] * $bill);
    }

    if ($money != 0) {
        $error = 'Недостаточно купюр';
    }

    $billsCount = '';
    $issued = array_reverse($issued, true);
    foreach ($issued as $bill => $count) {
        if ($count != 0) {
            $billsCount .= "{$bill}x{$count} ";
        }
    }
}

echo "Сумма: {$input}\n";
if ($error != '') {
    echo "Выдача невозможна: {$error}\n";
} else {
    echo "Выдача возможна, число купюр:\n{$billsCount}";
}
