Skip to main content
. 2020 Aug 22;22(9):923. doi: 10.3390/e22090923
Algorithm 1 DP based counting algorithm for h(n,Δ,m,d)
Input: Integers n1m0 and Δd0.
Output:h(n,Δ,m,d).
h[1,j,0=,0=]:=h[1,j,0=,p]:=h[1,j,0,p]:=1;
h[i,j,0=,p]:=h[i,j,0,p]:=0;
h[2,j,1=,p=]:=1; h[2,j,1=,p]:=h[2,j,1,p]:=p+1
 for each 2in,0jΔ, 0pmin{j,d};
for i:=3,4,,n do
   for j:=0,1,,Δ do
     for k:=1,2,,min{i,m} do
       for p:=0,1,,min{j,d} do
         if p=0 and k=1 then
           h[i,j,1=,0=]:=h[i,j,1=,0]:=h[i,j,1,0]:=1
         else /* p1 or k2 */
           c:=1; h[i,j,k=,p=]:=0; /* Initialization */
           if p=0 then
             :=(i1)/k
           else /* p1 */
             :=min{(i1)/k,j/p}
           end if;
           for q:=1,2,, do
             c:=c·(h[k,p,k1,p]+q1)/q;
             if p=0 then
               h[i,j,k=,p=]:=h[i,j,k=,p=]+c·h[iqk,j,min{ikq1,k1},j]
             else /* p1 */
               h[i,j,k=,p=]:=h[i,j,k=,p=]+c·h[ikq,jpq,k=,min{jpq,p1}]+h[ikq,jpq,min{ikq1,k1},jpq]
             end if
           end for;
           if p=0then /* k2 */
             h[i,j,k=,0]:=h[i,j,k=,0=]
           else /* p1 */
             h[i,j,k=,p]:=h[i,j,k=,p1]+h[i,j,k=,p=]
          end if;
          h[i,j,k,p]:=h[i,j,k1,p]+h[i,j,k=,p]
        end if
      end for
    end for
  end for
end for;
output h[n,Δ,m,d] as h(n,Δ,m,d).