解説

dp[i][j][k]:=dp[i][j][k]:= 先頭 ii 項目まで決め、MM で総和を割ったあまりは jj で、最後の項が 22 であるかどうかが kk
とすれば、O(NM)O(NM) で解くことができます。

一方、22 の個数を決め打ってみます。このとき、総和が MM の倍数になるような 11 の個数の決め方の総数は O(NM)O(\frac{N}{M}) 程度です。
また、これらを決めれば 00 の個数も分かります。よって、あとは 22 が隣り合わないような並べ方の総数が分かればよく、これは先に 0011 を並べて間または両端に 22 を並べる方法を求めれば良いです。
これで O(N2M)O(\frac{N^2}{M}) でも解くことができます。

min(NM,N2M)\min(NM, \frac{N^2}{M})NNN\sqrt{N} 程度なので、MM に応じて使い分けることでこの問題が O(NN)O(N\sqrt{N}) で解けました。

余談

これ を出すときに一緒に出そうと思ってたんですが没になっていました

お願い

間違いあればコメントで指摘を頂けると嬉しいです。