Project Euler 253(2)

プロジェクトオイラー
http://projecteuler.net/index.php?section=problems&id=253


なんとか答えが出た。結局、最初に考えた方針でやった。
いつものパターンで、状態とそこに至る経路数(と最大のセグメント数)を数えていけばいい。しかし、完全な状態を記述すると、40のうち20が揃った状態は40C20 ≒ 1.3e11で話にならない。そこで、連続で埋まっている部分の長さと連続で空いている長さだけで状態とする。こうするのはいいのだが、場合わけが多いのが厄介で、なかなか手が付かなかった。
なんとか答えは出たが、50分近くかかった。辞書をリストに、整数を浮動小数点数にしてみたが、それほど速くならない。別のところで時間がかかっているのだろうか。