はじめに
Library Checker さんの Subset Sum
を解いたのですが, 日本語の解説がぱっと見なさそう? なので書いておきます
(タイトルに数式を入れる方法がわからなかったので Count Subset Sum としました やり方知ってる方がいたら教えてください)
本文
概要
整数列 があったときに, 各 ] について, 総和が になるような部分列の数を で求めます
制約
解法
みんな大好き形式的冪級数で考えます
を使う/使わない を と表現すれば
としたときに の の項の係数が に対する答えです
さて, これは次数がとても大きくなりうるので高速に計算するのはつらいです
ということで, 積を計算するのはつらいので和に変換します
形式的冪級数の はニュートン法を用いることで項数を として で求めることができるので, を求めることができれば で答えが求まります
ということで を求めます
ここで, のマクローリン展開を考えると
と書けるので,
です 無限に続きますが, 今回次数は あれば十分です
さて, を となるような の数 とすると
と書けますが, 各 について上の式を計算すると計算回数は調和級数で抑えられます
ということでこちらは で求めることができます
全体でみても で求めることができました
おわりに
【競技プログラミング】形式的冪級数の応用テクニック(前編) - Qiita
https://arxiv.org/pdf/1807.11597.pdf
この辺見たらわかると思います