/* Some Dynamic Programming. The coin change problem */ let type aint = array of int var coins : aint := new aint[6] of 0 var d : aint := new aint[200] of 500 var j : int := 0 in coins[0] := 1; coins[1] := 2; coins[2] := 5; coins[3] := 10; coins[4] := 20; coins[5] := 50; d[0] := 0; for i:=0 to 5 do ( j := 0; while ( j < 200-coins[i] ) do ( d[j + coins[i]] := (if (d[j + coins[i]] > d[j] + 1) then d[j] + 1 else d[j + coins[i]]); j := j + 1 ) ); d end