<?php
//массив с доступным кол-вом купюр и массив с подсчетом выданного количества купюр
$bills = array(5000 => 5, 2000 => 1, 1000 => 2, 500 => 2, 200 => 2, 100 => 1);
$givenBillsCount = array(5000 => 0, 2000 => 0, 1000 => 0, 500 => 0, 200 => 0, 100 => 0);                                                                     

$neededAmount = 29600; //хотим получить эту сумму
$givenAmount = 0; //выданная сумма

for ($i=0; $givenAmount < $neededAmount; $i++) { 

	$theRest = $neededAmount - $givenAmount; //сколько осталось выдать денег

//в зависимости от выполнения условий, выберется нужная доступная купюра
	foreach ($bills as $value1 => $amount1) {
		if ($neededAmount >= $value1 && $theRest >= $value1 && $bills[$value1] != 0) {
		    $availableBill = $value1;
		    $givenBillsCount[$value1]++;
		    break;
	    }elseif ($neededAmount < $value1 || $theRest < $value1 || $bills[$value1] == 0) { //обратное первому условию
	    	'парам пам пам ничего не делаем';
	    } else { //в случае, если из доступных купюр не осталось ничего, а необходимая сумма все ещё не была выдана
		    echo "Сумма: {$neededAmount}\n";
		    echo "Выдача невозможна: в банкомате не хватает суммы ({$theRest}), попробуйте вывести сумму {$givenAmount} или меньше";
		    break; 
	    }
	}

	$givenAmount += $availableBill; //прибавляем нашу купюру к сумме, которую мы уже выдали
	$bills[$availableBill] = $bills[$availableBill] - 1; /*уменьшаем количество доступных 
                                                          купюр выбранного номинала на 1*/
	if ($neededAmount == $givenAmount) {

		echo "Выдача возможна, количество купюр:\n"; //успех

		foreach ($givenBillsCount as $value2 => $amount2) {
			
			if ($givenBillsCount[$value2] == 0) { //удаляем все не понадобившиеся купюры из массива
				unset($givenBillsCount[$value2]);
			} else {
				echo "{$amount2}x{$value2} "; //отображаем только те купюры, которые нам понадобились
			}
		}
		break;
	}	
}

?>