FANDOM


概要

①
端の列が1行ならバシク行列と同様の操作をする。

②
端が2行以上なら、その二行目までの値でバシク行列と同様に悪い部分を決める。ただし、悪い部分の
先頭の行数が端より大きいなら、先頭の先を調べ、行数が端以下になるまで悪い部分を拡げる。
ただし、悪い部分を決める際に端からΔを引くのは一行目のみ。

|1 2:3 4 5:|*点の内側が悪い部分
|0 1:1 2 2:|
|0 0:1 1 1:|

③
端の値と悪い部分の先頭の値を比べ、端の方が大きくなる値の個数が端の行数に満たないなら、
Δを端と悪い部分の先頭から、(その大きくなる値の個数-1)行だけ作り、端を刈り悪い部分を複製する。
Δを足すルールは、バシク行列と同じ。

|1 2 3 4 5|=>|1 2 3 4 5 6|
|0 1 1 2 2|  |0 1 1 2 1 2|
|0 0 1 1 1|  |0 0 1 1 1 1|

④
③で比較した際に端の値全てが悪い部分の先頭より大きければ、端より左側にある端の一行目より小さい
端に最も近い列(根元の列)と悪い部分の先頭から(端の行数-1)行のΔを作り、悪い部分の先頭を外し、
端を刈り、複製する。Δを足すルールは、(悪い部分の先頭である)または、(悪い部分の先頭より値が
大きい)または(ある列の3行目以降でその列の2行目にΔが足される)且つ根元の列の同じ行がΔを
足される、である。

|1:2 3:4|*点の内側がΔが足される悪い部分
|0:1 1:1|  
|0:0 1:1|  
|0 0 0 1|

⑤
④で端の最後の行と悪い部分の先頭の同じ行の差が2以上、または端で根元がない列で一行目が
2以上なら、端だけを複製する。複製する度に(その差-1)または(その一行目-1)を複製した端の
一行目と最後の次の行に足す。

|2|=>|1 2 3 ...|
     |0 1 1    |
     |0 0 1    |
     |...      |

⑥
Btm(x)=|x|[x]

バシク三角行列数

A=9:dim B[∞,∞],C[∞,∞],D[∞]
for E=0 to 9
 B[1,1]=A:C[1,1]=1
 for F=1 to 1 step -1
  A=A*A
  for G=0 to F
   if F=G then
    B[F,1]=B[F,1]-1:H=B[F,1]:I=0:J=1
   elseif B[F-G,1]<B[F,1]-D[1]
    D[1]=B[F,1]-B[F-G,1]
    if B[F,2]=0 then
     I=G:J=1:G=F:D[1]=0
    elseif B[F-G,2]<B[F,2]
     for K=2 to A
      if 0=B[F,K+1] & 0=B[F-G,K+1] then
       I=G:J=K:G=F:K=A
      elseif 0=B[F,K+1] & 0<B[F-G,K+1]
       K=A
      endif
     next
    endif
   endif
  next
  if 0<I then H=B[F,J]-B[F-I,J]-1
  if 0<H then
   if 0<I then B[F,J]=B[F,J]-1
   for L=1 to A
    B[F+1,1]=B[F,1]+H
    for M=2 to K+A
     B[F+1,M]=B[F,M]
     if B[F,M]=0 then B[F+1,M]=H:C[1,M]=1:M=K+A
    next
    F=F+1
   next
   F=F+1
  else 
   for N=2 to J
    if B[F-I,N]<B[F,N] then O=N else N=J
   next
   if 2<J
    if O<J then
     for P=2 to O-1
      D[P]=B[F,P]-B[F-I,P]
     next
    else
     for Q=0 to F
      if B[F-Q,1]<B[F,1] then
       for R=1 to J-1
        D[R]=B[F-Q,R]-B[F-I,R]
       next
        Q=F
      endif
     next
    endif
   endif
   for S=1 to I
    for T=S to 0 step -1
     if B[F-I+T,1]<B[F-I+S,1] then
      for U=1 to J
       if (B[F-I,U]<B[F-I+S,U] | C[S+1,2]=1 & 3<J) & C[T+1,U]=1 then
        C[S+1,U]=1
       else
        C[S+1,U]=0
       endif
      next
      T=0
     endif
    next
   next
   if 2<J & O=J then V=1:I=I-1 else V=0
   for W=1 to A
    for X=1 to I
     for Y=1 to A
      B[F,Y]=B[F-I,Y]
      if C[X+V,Y]=1 then B[F,Y]=B[F,Y]+D[Y]
     next
     F=F+1
    next
   next
  endif
  for Z=1 to A
   D[Z]=0
  next
 next
next
print A

広告ブロッカーが検出されました。


広告収入で運営されている無料サイトWikiaでは、このたび広告ブロッカーをご利用の方向けの変更が加わりました。

広告ブロッカーが改変されている場合、Wikiaにアクセスしていただくことができなくなっています。カスタム広告ブロッカーを解除してご利用ください。

FANDOMでも見てみる

おまかせWiki