<?php
//Сколько выдать
$input = 6600;
//Номиналы и количество имеющихся купюр
$bills = array(
    100 => 0,
    200 => 3,
    500 => 1,
    1000 => 0,
    2000 => 4,
    5000 => 1
);
//Упорядочить валюты по убыванию
krsort($bills);
//Количество выданных купюр
$issued = array_fill_keys(array_flip($bills), 0);
$remained = $input;
//Удаляем из массива купюры которых нет в наличии
$toDelete = array_keys($bills, 0);
foreach ($toDelete as $bill) {
    unset($bills[$bill]);
}

$tmp = '';
$f[0] = 0;
for ($m = 1; $m <= $input; ++$m) {
    $f[$m] = INF;
    $billsTmp = $bills;
    foreach ($billsTmp as $bill => $count) {
        if ($count == 0) {
            continue;
        }
        if (($m >= $bill) && ($f[$m - $bill] + 1 < $f[$m])) {
            $f[$m] = $f[$m - $bill] + 1;
            $billsTmp[$bill] = $count - 1;
        }
    }
}

if ($f[$input] == INF) {
    echo "Выдача невозможна";
} else {
    while ($input > 0) {
        foreach ($bills as $bill => $count) {
            if (isset($f[$input -$bill])) {
                if ($f[$input - $bill] == $f[$input] - 1) {
                    $tmp .= $bill . ' ';
                    $input -= $bill;
                    break;
                }
            }
        }
    }
}
print_r($tmp);
//print_r($f);