OFFSET
0,13
LINKS
Alois P. Heinz, Antidiagonals n = 0..100, flattened
Wikipedia, Polyomino
EXAMPLE
Square array A(n,k) begins:
1, 1, 1, 1, 1, 1, 1, 1, 1, ...
1, 1, 1, 1, 1, 1, 1, 1, 1, ...
1, 1, 5, 1, 1, 1, 1, 1, 1, ...
1, 1, 11, 6, 1, 1, 1, 1, 1, ...
1, 1, 36, 13, 7, 1, 1, 1, 1, ...
1, 1, 95, 22, 15, 8, 1, 1, 1, ...
1, 1, 281, 64, 25, 17, 9, 1, 1, ...
1, 1, 781, 155, 37, 28, 19, 10, 1, ...
1, 1, 2245, 321, 100, 41, 31, 21, 11, ...
MAPLE
b:= proc(n, l) option remember; local d, k; d:= nops(l)/2;
if n=0 then 1
elif min(l[])>0 then (m->b(n-m, map(x->x-m, l)))(min(l[]))
else for k while l[k]>0 do od;
`if`(n<d, 0, b(n, subsop(k=d, l)))+
`if`(d=1 or k>d+1 or max(l[k..k+d-1][])>0, 0,
b(n, [l[1..k-1][], 1$d, l[k+d..2*d][]]))
fi
end:
A:= (n, k)-> `if`(k=0, 1, b(n, [0$2*k])):
seq(seq(A(n, d-n), n=0..d), d=0..14);
MATHEMATICA
b[n_, l_List] := b[n, l] = Module[{d = Length[l]/2, k}, Which[n == 0, 1, Min[l] > 0 , Function[{m}, b[n-m, l-m]][Min[l]], True, For[k=1, l[[k]] > 0, k++]; If[n<d, 0, b[n, ReplacePart[l, k -> d]]] + If[d == 1 || k > d+1 || Max[l[[k ;; k+d-1]]] > 0, 0, b[n, Join[l[[1 ;; k-1]], Array[1&, d], l[[k+d ;; 2*d]]]]]]]; A[n_, k_] := If[k == 0, 1, b[n, Array[0&, 2k]]]; Table[Table[A[n, d-n], {n, 0, d}], {d, 0, 14}] // Flatten (* Jean-François Alcover, Jan 30 2015, after Alois P. Heinz *)
CROSSREFS
KEYWORD
nonn,tabl
AUTHOR
Alois P. Heinz, Nov 26 2014
STATUS
approved