<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://algorist.com/algowiki_v2/index.php?action=history&amp;feed=atom&amp;title=TADM2E_8.24</id>
		<title>TADM2E 8.24 - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://algorist.com/algowiki_v2/index.php?action=history&amp;feed=atom&amp;title=TADM2E_8.24"/>
		<link rel="alternate" type="text/html" href="https://algorist.com/algowiki_v2/index.php?title=TADM2E_8.24&amp;action=history"/>
		<updated>2026-05-01T03:51:28Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.28.0</generator>

	<entry>
		<id>https://algorist.com/algowiki_v2/index.php?title=TADM2E_8.24&amp;diff=189&amp;oldid=prev</id>
		<title>Algowikiadmin: Recovering wiki</title>
		<link rel="alternate" type="text/html" href="https://algorist.com/algowiki_v2/index.php?title=TADM2E_8.24&amp;diff=189&amp;oldid=prev"/>
				<updated>2014-09-11T18:24:12Z</updated>
		
		<summary type="html">&lt;p&gt;Recovering wiki&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== A Python Solution - O(1) ==&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
n = int(sys.argv[1])&lt;br /&gt;
&lt;br /&gt;
OUT_TMP = &amp;quot;Min # of coins for covering %d: %d, coins used: %s&amp;quot;&lt;br /&gt;
COINS = tuple(sorted((3, 4, 9, 20, 22, 23), reverse=True))&lt;br /&gt;
FAILSAFE_MAX = 9999999999&lt;br /&gt;
&lt;br /&gt;
if len(COINS) &amp;lt; 1: raise Exception(&amp;quot;Coins please!&amp;quot;)&lt;br /&gt;
if len(COINS) == 1:&lt;br /&gt;
    c = COINS[0]&lt;br /&gt;
    if n % c == 0:&lt;br /&gt;
        print OUT_TMP % (n, n/c, [c]*(n/c))&lt;br /&gt;
        sys.exit()&lt;br /&gt;
    else:&lt;br /&gt;
        raise Exception(&amp;quot;Impossible!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
CAL_MAX = min(COINS[0] * COINS[1], n+1)&lt;br /&gt;
&lt;br /&gt;
min_coins_n = [0]&lt;br /&gt;
min_coins_l = [()]&lt;br /&gt;
&lt;br /&gt;
for i in xrange(1, CAL_MAX):&lt;br /&gt;
    if i in COINS:&lt;br /&gt;
        min_coins_n.append(1)&lt;br /&gt;
        min_coins_l.append((i,))&lt;br /&gt;
    else:&lt;br /&gt;
        current_min = -1&lt;br /&gt;
        for c in COINS:&lt;br /&gt;
            smaller_i = i - c&lt;br /&gt;
            if smaller_i &amp;gt; 0 and min_coins_n[smaller_i] &amp;lt; FAILSAFE_MAX and \&lt;br /&gt;
               (current_min == -1 or min_coins_n[smaller_i] &amp;lt; min_coins_n[current_min]):&lt;br /&gt;
                current_min = smaller_i&lt;br /&gt;
&lt;br /&gt;
        if current_min != -1:&lt;br /&gt;
            min_coins_n.append(min_coins_n[current_min] + 1)&lt;br /&gt;
            l = list(min_coins_l[current_min]) # copy&lt;br /&gt;
            l.append(i - current_min)&lt;br /&gt;
            # another copy, not required but robuster code&lt;br /&gt;
            ll = tuple(l)&lt;br /&gt;
            min_coins_l.append(tuple(l))&lt;br /&gt;
        else:&lt;br /&gt;
            # not changable using the current coins&lt;br /&gt;
            min_coins_n.append(FAILSAFE_MAX)&lt;br /&gt;
            min_coins_l.append(None)&lt;br /&gt;
&lt;br /&gt;
big_part_n = 0&lt;br /&gt;
coins_list = []&lt;br /&gt;
remaining_n = n&lt;br /&gt;
if n &amp;gt; CAL_MAX:&lt;br /&gt;
    n_big_part = n - CAL_MAX&lt;br /&gt;
    big_part_n = (n_big_part / COINS[0]) + 1&lt;br /&gt;
    coins_list = [COINS[0]] * big_part_n&lt;br /&gt;
    remaining_n -= big_part_n * COINS[0]&lt;br /&gt;
&lt;br /&gt;
final_n = big_part_n + min_coins_n[remaining_n]&lt;br /&gt;
if final_n &amp;gt;= FAILSAFE_MAX:&lt;br /&gt;
    raise Exception(&amp;quot;Impossible!&amp;quot;)&lt;br /&gt;
coins_list.extend(min_coins_l[remaining_n])&lt;br /&gt;
print OUT_TMP % (n, final_n, coins_list)&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== A Java solution - O(n) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
public class CoinProblem {&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        int sumToMakeChangeFor = 20;&lt;br /&gt;
        int[] coinDenominations = new int[]{1, 2, 5, 10};&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;Number of coins needed = &amp;quot; + numberOfCoinsNeededForChange(sumToMakeChangeFor, coinDenominations));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private static int numberOfCoinsNeededForChange(int sum, int[] coinDenominations) {&lt;br /&gt;
        int[] minimumNumberOfCoinsNeeded = new int[sum + 1];&lt;br /&gt;
        for (int i = 0; i &amp;lt;= sum; i++){&lt;br /&gt;
            minimumNumberOfCoinsNeeded[i] = Integer.MAX_VALUE;&lt;br /&gt;
        }&lt;br /&gt;
        minimumNumberOfCoinsNeeded[0] = 0;&lt;br /&gt;
&lt;br /&gt;
        for (int currentSum = 1; currentSum &amp;lt;= sum; currentSum++) {&lt;br /&gt;
            for (int j = 0; j &amp;lt; coinDenominations.length; j++) {&lt;br /&gt;
                if (coinDenominations[j] &amp;lt;= currentSum &amp;amp;&amp;amp; &lt;br /&gt;
                          ((minimumNumberOfCoinsNeeded[currentSum - coinDenominations[j]] + 1) &amp;lt; minimumNumberOfCoinsNeeded[currentSum]))&lt;br /&gt;
                    minimumNumberOfCoinsNeeded[currentSum] = minimumNumberOfCoinsNeeded[currentSum - coinDenominations[j]] + 1;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return minimumNumberOfCoinsNeeded[sum];&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reference: [http://www.topcoder.com/tc?module=Static&amp;amp;d1=tutorials&amp;amp;d2=dynProg Dynamic Programming, TopCoder.com]&lt;/div&gt;</summary>
		<author><name>Algowikiadmin</name></author>	</entry>

	</feed>