E - Lucky bag Editorial by hirayuu_At
Pythonで実装するときの注意点Pythonで実装する場合、実装方針によっては非自明な高速化が必要です。
たとえば、以下の手法で高速化できる可能性があります。
- 処理系を
Python (PyPy 3.10-v7.3.12)
にする- 解説執筆時点では、この処理系でのみ
AC
が出ています。
- 解説執筆時点では、この処理系でのみ
- bitDPを非再帰にする
これは、bit数が少ない要素から昇順に見ていくことで実現できます。- 追記:よく考えたら数の小さい順でよいですね…
- 整数型を交えず、すべて小数型で計算する
- 型変換のオーバーヘッドは意外と馬鹿になりません。
- bitの部分集合を高速ゼータ変換で取得する
- やや速くなります。しかし、これをしなければならないくらい遅いプログラムは解法を見直したり素直に速い言語に変える方が早いかもしれません。
実装例(PyPy3,1948ms)
(追記:未検証ですが、Nachiaさんのユーザー解説の方法も効果が大きいかもしれません。)
posted:
last update: