http://zmila.livejournal.com/627170.html

што такое правільнае рашэніе? гэта калі два ці тры дні думаеш-думаеш, робіш два ці тры варыянты альгарытма па 2-3 экраны, і кожны зь іх працуе 5-10 хвілінаў, і не дае адказу • а потым пішаш правільны альгарытм у 15 радкоў, які рашае гэтую ж задачу за 100 мс • і сцука, правільна зь першай спробы, без адладкі і тэставаньня •   problem76

var memo = {};
function divide( what, max )
{

<strong>if</strong> ( what == 0 )
	<strong>return</strong> 1;
<strong>var</strong> key = what+":"+max, val = memo[key];
<strong>if</strong> ( val )
	<strong>return</strong> val;
<strong>var</strong> ways = 0;
<strong>for</strong> ( <strong>var</strong> curr = Math.min(what, max); curr &gt; 0; curr-- )
	ways += divide( what-curr, curr );
memo[ key ] = ways;
<strong>return</strong> ways;

}

divide(100, 99);