AtCoder Beginner Contest 261 D問題 Flipping and Bonus
問題
提出解答
問題の概要
回のコイントスを行う. また, で初期化されているカウンタを持っている.
回目のコインの表裏によって, 以下を行う.
- 表の場合, 円貰い, カウンタを 増やす.
- 裏の場合, カウンタを にする.
ここで, に対して, 次のボーナスがある.
- カウンタが になる度に 円追加で貰える.
最大で何円貰えるか?
制約
- は全て異なる.
解法
をカウンタが になった時に貰えるボーナス金とする. つまり,
である.
動的計画法で解く. に対して, を以下で定義する.
- を 回目のコイントスの後, カウンタが であるような表裏の結果の中で貰えるお金の最大値
とする.
ベースケースは のときの である.
更新式について, とする.
このとき, 求めるべき最終解答は である.
この動的計画法により, 時間計算量 時間で計算できた.