部活6
部活です。
テーマは変わらず。
今までそれらしい計算式でそれらしいことを並べてさて実装、なんて言っていましたが、根本的に間違っている点があります。それは、計算を削減すべき場所です。
以前99C19*43*20!という計算式を示しましたが、いままでの枝刈りで削減しているのは第3項の20!の計算なのです。
最も量が多いパネル選択部分の99C19を減らさない限り、目に見えた計算量の減少はあり得ません。
というわけで、ここに対するアプローチを考えます。
単純に考えると、選ばれたパネルの最高得点の和が高いものから計算していけば、解にたどり着くスピードは上がるはずです。
簡単に言うと、
①各パネルの最高得点について、19枚の和が最大になるSを求める(既知)
②99枚のパネル群から最高得点の和がSになるように19枚を選んで探索を行う
③最高得点の和がS-1, S-2 ...となるように探索を続ける
④探索pにおいて、S-pが探索で得られた最高点と同値になったら探索を打ち切る
99枚のパネルから最高得点の部分和がS-pとなるような19枚のパネル群を抽出する方法については、次回考えたいと思います。