<?php

error_reporting(-1);

//требуемая сумма
$amount = 6600;

//запас наличных 
$nominals = array(100, 200, 500, 1000, 2000, 5000);
$check = array();
$check[0] = array(
   100      =>   0,
   200      =>   3,
   500      =>   1,
   1000     =>   0,
   2000     =>   4,
   5000     =>   1
);

$tic = false;
$pew = 0;
$loooong = 9999;
$F  = array();
$F = array_fill(0, $amount + 1, $loooong); // заполнение массива значением long, до 6600
$F[0] = 0;
for ($k = 1; $k < $amount + 1; $k++){
	for ($i = 0; $i < count($nominals); $i++){
		if ($k - $nominals[$i] >= 0 && $F[$k - $nominals[$i]] < $F[$k] && $check[$k - $nominals[$i]][$nominals[$i]] > 0){
			$F[$k] = $F[$k - $nominals[$i]];
			$check[$k] = $check[$k - $nominals[$i]]; //присвоение массиву в значении $k массива ($k - номинал банкноты)
			$pew = $nominals[$i];
			$tic = true;
		}
		
	}
	if($tic == true){       //прибавление банкноты к истинному решению, вычитание банкноты из банкомата
	$check[$k][$pew] -= 1; 
    $F[$k] += 1;
	$tic = false;
	}
}

if ($F[$amount] >= 9999){
	echo 'выдать сумму невозможно';
}
else{
	if ($F[$amount] == 0){
	'выдано ноль банкнот';
    }
    else{
	echo "Сумма к выдаче:{$amount}\n";
	echo "выдано банкнот всего: {$F[$amount]}\n";
    for($p = count($nominals) - 1; $p >= 0; $p--){
		$bankn = $check[0][$nominals[$p]] - $check[$amount][$nominals[$p]];
		echo "выдано {$bankn} банкнот номиналом {$nominals[$p]} рублей\n";
	    } 
    }
}