public final class MakeChange
{
// Dynamic programming algorithm to solve change making problem.
// As a result, the coinsUsed array is filled with the
// minimum number of coins needed for change from 0 -> maxChange
// and lastCoin contains one of the coins needed to make the change.
public static void makeChange( int [ ] coins, int differentCoins,
int maxChange, int [ ] coinsUsed, int [ ] lastCoin )
{
coinsUsed[ 0 ] = 0; lastCoin[ 0 ] = 1;
for( int cents = 1; cents <= maxChange; cents++ )
{
int minCoins = cents;
int newCoin = 1;
for( int j = 0; j < differentCoins; j++ )
{
if( coins[ j ] > cents ) // Cannot use coin j
continue;
if( coinsUsed[ cents - coins[ j ] ] + 1 < minCoins )
{
minCoins = coinsUsed[ cents - coins[ j ] ] + 1;
newCoin = coins[ j ];
}
}
coinsUsed[ cents ] = minCoins;
lastCoin[ cents ] = newCoin;
}
}
{
// Dynamic programming algorithm to solve change making problem.
// As a result, the coinsUsed array is filled with the
// minimum number of coins needed for change from 0 -> maxChange
// and lastCoin contains one of the coins needed to make the change.
public static void makeChange( int [ ] coins, int differentCoins,
int maxChange, int [ ] coinsUsed, int [ ] lastCoin )
{
coinsUsed[ 0 ] = 0; lastCoin[ 0 ] = 1;
for( int cents = 1; cents <= maxChange; cents++ )
{
int minCoins = cents;
int newCoin = 1;
for( int j = 0; j < differentCoins; j++ )
{
if( coins[ j ] > cents ) // Cannot use coin j
continue;
if( coinsUsed[ cents - coins[ j ] ] + 1 < minCoins )
{
minCoins = coinsUsed[ cents - coins[ j ] ] + 1;
newCoin = coins[ j ];
}
}
coinsUsed[ cents ] = minCoins;
lastCoin[ cents ] = newCoin;
}
}