問題はこちら
問題概要
曜日- 曜日
が「休日」である場合は
- 曜日
が「平日」のとき,直前の休日が
日前,直後の休日が
日後である場合は
一週間当たりの生産量の最大値を求めよ.
解説
曜日
つまり,曜日は必ず休日としてもよいです.
次に,初日が休日で,その後平日が続くようなブロックに分解してみます.

休日日+平日
日の全
日からなるブロックの生産量は公式解説の
と等しいです.これを
とします.
すると,この問題は
- 品物
の重みを
- 品物
の価値を
- 品物の重みの合計の上限を
としたときの個数制限なしナップサック問題となります.
よって,この問題を時間計算量で解くことができます.
提出プログラム
https://atcoder.jp/contests/abc285/submissions/38167895 C++https://atcoder.jp/contests/abc285/submissions/38169128 Python
N = int(input()) A = list(map(int,input().split())) V = [0] * (N+1) DP = [0] * (N+1) for i in range(2,N+1): V[i] = V[i-1] + A[i//2-1] for j in range(i,N+1): DP[j] = max(DP[j], DP[j-i] + V[i]) print(DP[N])