AtCoder Beginner Contest 285 E問題 Work or Rest
問題
提出解答
問題の概要
一週間が 日からなる世界を考える. 一週間は曜日 と進み, 曜日 の翌日は次の週の曜日 になる.
各曜日について, その曜日を平日とするか, 休日とするかを決定する. ただし, 少なくとも つの曜日については休日としなければならない.
平日と休日を決定した後, 曜日 の生産量を次のように決定する.
- 曜日 が休日ならば, 生産量は である.
- 曜日 が平日ならば, 曜日 の直前の休日が 日前, 直後の休日が 日後であるとき, 生産量は である.
各曜日の生産量の総和の最大値を求めよ.
制約
解法
対称性より, 曜日 を休日としてもよい.
また, ある休日のあと, 次の休日が 日後である場合を考える. このとき, 日間の間における生産量の総和は のみによって決定される.
を次のようにして定める.
- を次の休日が 日後である場合, その間にある曜日における生産量の総和とする.
このとき,
である.
そして, 次のような動的計画法を考える.
- ] を次の休日が 日以内である場合を全て考慮した上で, 日間が経つときの生産量の最大値
ベースケースは のときで
である. 更新式についても, 日を採用するかしないかで場合分けが発生し,
である.
このとき, ] が解答になる.
計算量 時間で解くことができた.