Problem 117

http://projecteuler.net/index.php?section=problems&id=117
そのままDP。

import Data.Array.IArray
measure n = mArr!n
    where mArr = listArray (0,n). map m $[0..n]::Array Int Integer
          m 0 = 1
          m x = sum.map m'.zipWith (-) (repeat x) $ [1..4]
          m' x | x < 0 = 0
               | x >= 0 = mArr!x
main = print.measure$ 50

というか、高々4つ前の値しか必要ないので、DPも必要ない?
ないね。

import Data.List

measure' = 0:0:0:1:zipWith4 add m0 m1 m2 m3
    where add a b c d = a+b+c+d
          (m0:m1:m2:m3:_) = iterate tail measure'

main = print$measure'!!53