SRM648 div1 250

問題

整数N,Kが与えられる。
次の条件を満たす文字列が作れる場合、そのような文字列の一つを返す。なければ空文字を返す。
・文字長はN
・各文字はAまたはBのどちらか
・i

考え方

memo[i][j][k]:=文字長iで、Bをj個含み、(i,j)のペア数がk個になっている文字列
とすると、i+1の文字長の文字列は、先頭にAを付ける場合k->k+j、先頭にBを付ける場合j->j+1になる。
これをすべて求めて、memo[N][i][k]があるようなiがあればそれが答え。


本番は、大雑把に「50*50*(50*49/2)=3,062,500のstring配列の確保ができるか?」と「50*50*(50*49/2)*string操作50=1.5*10^8が間に合うのか?」がわからなくて、別解を考えてた。。。
前者は、文字列サイズと空文字列が多いのでそんなに容量使わないのと、後者も実際動かすと2sもかからず(100msぐらい)。
結局範囲外アクセスで落としてしまった・・・