DPテーブルを書いてみて、混み合っている場合は無駄な計算がないか考える | | 2-3 漸化式を工夫する, 個数制限なしナップザック問題 |
boolのDPは一般に非効率 | | 2-3 漸化式を工夫する, 個数制限付き部分和問題 |
DPの双対性 | 「状態に対して評価値がどうなるか」⇔「固定された評価値(=ここでの状態)に対して、最も良い状態(=ここでの評価値)は何か」 | (2-3 漸化式を工夫する, 01ナップサック問題その2, 最長部分増加部分列問題) |
「fの最大化」⇔「命題C(x)=『fがx以上である』が判定可能ならば、xの探索的最大化」 | | 3-2 平均最大化 |
n回の掛け算はO(log n)で計算可能 | | 3-1 べき乗を高速に計算する |
漸化式は行列演算に変換可能 | | 3-5 行列累乗 |
modはどこでしても同じ | | 3-5 行列累乗, SRM 502 Div2 Hard |
集合を、整数型のビット演算を用いてDPの状態に組み込む | | 3-5 ビットDP |
DPは適切なデータ構造を用いると高速化 | | 3-5 データ構造を用いて高速化 |
問題を同値な数学に置き換える | 牛が云々とかいう状態で考えたくない | SRM 502 Div2 Hard |
DPのデータ型のパターンはいっぱいある | 6次元配列だろうが何だろうがビビらない | SRM551 Div2 Hard |
一つ前にしか依存しないDPテーブルは2テーブルを使いまわす | int prev=i%2,next=prev^1;dpdp[next][(x+i)%N][y-1] += dpdp[prev][x][y]; | SRM 502 Div2 Hard |
最小手数といえば幅優先探索 | | SRM 509 Div2 Hard |