G - Jumping sequence Editorial by cai_lw


Subset sumに帰着するまでは、公式解説に参考してください。https://atcoder.jp/contests/abc221/editorial/2724

\(N\)個の\(D_{max}\)以下の正整数のsubset sumは、基本的な動的計画法(DP)アルゴリズムで解くには最大\(O(N^2D_{max})\)かかります。Bitset等の定数倍高速化手法を使うと、この問題を時間制限内で解けます。

ただし、(Pisinger, 1999)による\(O(ND_{max})\)で解けるDPアルゴリズムがあります。実装は20行程度で出来て、定数倍も軽いので、競技プログラミングには実用的です。また、DP復元も可能です。よって、この問題は\(O(ND_{max})\)で解けます。

元論文のPDFファイルが破損しているため、このStackOverflow回答に参考することを推奨します。https://stackoverflow.com/questions/18821453/bounded-knapsack-special-case-small-individual-item-weight-is-small-compared-t

実装例(C++, 55ms): https://atcoder.jp/contests/abc221/submissions/26323758

posted:
last update: