>> ビットパターンの1の数え方がすこしトリッキーだと思いましたが(笑)
初見ではそう感じると思います。が、結構有名な手法だと思います。

>> 真ん中のマスを開ける操作(& mb)は、bl[] を作るときにやってしまっても良いのではないかと思いました。
あ...、確かにそうですね。

それから、これは、天下り的な考えですが、もし、>>401のoutputの左の方にあるビンゴ達成数、
0,0,0,0,4,88,912,5928,27102,92520,244092,507696,... が、あらかじめ判っていたら、

a*C[20,0]=4 → a=4
4*C[20,1]+b*C[19,0]=88 → b=8
4*C[20,2]+8*C[19,1]+c*C[18,0]=912 → c=0
4*C[20,3]+8*C[19,2]+d*C[17,0]=5928 → d=0
4*C[20,4]+8*C[19,3]+e*C[16,0]=27102 → e=-30
4*C[20,5]+8*C[19,4]-30*C[16,1]+f*C[15,0]=92520 → f=-24
4*C[20,6]+8*C[19,5]-30*C[16,2]-24*C[15,1]+g*C[14,0]=244092 → g=-12
4*C[20,7]+8*C[19,6]-30*C[16,3]-24*C[15,2]-12*C[14,1]+h*C[13,0]=507696 → h=48

の様な手法で、係数を導き出すこともできますね。
まさにこれが、以前書いた立方体の数を数える問題の答えを表すときに用いた方法でした。