PHP Program for Coin Change | DP-7

Given a value N, if we want to make change for N cents, and we have infinite supply of each of S = { S1, S2, .. , Sm} valued coins, how many ways can we make the change? The order of coins doesn\’t matter.
For example, for N = 4 and S = {1,2,3}, there are four solutions: {1,1,1,1},{1,1,2},{2,2},{1,3}. So output should be 4. For N = 10 and S = {2, 5, 3, 6}, there are five solutions: {2,2,2,2,2}, {2,2,3,3}, {2,2,6}, {2,3,5} and {5,5}. So the output should be 5.
Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.
Following is a simple recursive implementation of the Coin Change problem.
PHP
<?php// Recursive PHP program for// coin change problem.// Returns the count of ways we can // sum S[0...m-1] coins to get sum nfunction coun($S, $m, $n){ // If n is 0 then there is // 1 solution (do not include // any coin) if ($n == 0) return 1; // If n is less than 0 then no // solution exists if ($n < 0) return 0; // If there are no coins and n // is greater than 0, then no // solution exist if ($m <= 0 && $n >= 1) return 0; // count is sum of solutions (i) // including S[m-1] (ii) excluding S[m-1] return coun($S, $m - 1,$n ) + coun($S, $m, $n - $S[$m - 1] );} // Driver Code $arr = array(1, 2, 3); $m = count($arr); echo coun($arr, $m, 4); // This code is contributed by Sam007?> |
PHP
<?php// PHP program for // coin change problem.function count1($S, $m, $n){ // We need n+1 rows as // the table is constructed // in bottom up manner // using the base case 0 // value case (n = 0) $table; for ($i = 0; $i < $n + 1; $i++) for ($j = 0; $j < $m; $j++) $table[$i][$j] = 0; // Fill the entries for // 0 value case (n = 0) for ($i = 0; $i < $m; $i++) $table[0][$i] = 1; // Fill rest of the table // entries in bottom up manner for ($i = 1; $i < $n + 1; $i++) { for ($j = 0; $j < $m; $j++) { // Count of solutions // including S[j] $x = ($i-$S[$j] >= 0) ? $table[$i - $S[$j]][$j] : 0; // Count of solutions // excluding S[j] $y = ($j >= 1) ? $table[$i][$j - 1] : 0; // total count $table[$i][$j] = $x + $y; } } return $table[$n][$m-1];}// Driver Code$arr = array(1, 2, 3);$m = count($arr);$n = 4;echo count1($arr, $m, $n);// This code is contributed by mits?> |
Following is a simplified version of method 2. The auxiliary space required here is O(n) only.
PHP
<?phpfunction count_1( &$S, $m, $n ){ // table[i] will be storing the number // of solutions for value i. We need n+1 // rows as the table is constructed in // bottom up manner using the base case (n = 0) $table = array_fill(0, $n + 1, NULl); // Base case (If given value is 0) $table[0] = 1; // Pick all coins one by one and update // the table[] values after the index // greater than or equal to the value // of the picked coin for($i = 0; $i < $m; $i++) for($j = $S[$i]; $j <= $n; $j++) $table[$j] += $table[$j - $S[$i]]; return $table[$n];}// Driver Code$arr = array(1, 2, 3);$m = sizeof($arr);$n = 4;$x = count_1($arr, $m, $n);echo $x;// This code is contributed// by ChitraNayal?> |
Please refer complete article on Coin Change | DP-7 for more details!
<!–
–>

How to change the maximum upload file size in PHP ?

How to change the session timeout in PHP?

How to Change Array Key to Lowercase in PHP ?

PHP Program for Program to cyclically rotate an array by one

PHP | php.ini File Configuration

How to import config.php file in a PHP script ?

Php Program for Check if an array is sorted and rotated

Program to remove empty array elements in PHP

Program to Insert new item in array on any position in PHP

PHP Program for Naive algorithm for Pattern Searching




Please Login to comment…