結果

問題 No.1117 数列分割
ユーザー tktk_snsn
提出日時 2021-05-15 13:44:02
言語 PyPy3
(7.3.15)
結果
TLE  
(最新)
AC  
(最初)
実行時間 -
コード長 863 bytes
コンパイル時間 299 ms
コンパイル使用メモリ 82,176 KB
実行使用メモリ 178,164 KB
最終ジャッジ日時 2024-10-03 01:29:47
合計ジャッジ時間 18,781 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 24 TLE * 2
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

from collections import deque
from itertools import accumulate
inf = 10**18
def sliding_max(A, rng):
d = deque()
for i, a in enumerate(A):
while d and d[0] <= i - rng:
d.popleft()
while d and A[d[-1]] < a:
d.pop()
d.append(i)
yield A[d[0]]
N, K, M = map(int, input().split())
A = list(map(int, input().split()))
S = [0] + list(accumulate(A))
# dp[j,i]: ij-> max
dp = [[-inf]*(N+1) for _ in range(K+1)]
dp[0][0] = 0
for i in range(K):
val = tuple(dp[i][j] - S[j] for j in range(N))
for j, x in enumerate(sliding_max(val, M), 1):
dp[i+1][j] = max(dp[i+1][j], x + S[j])
val = tuple(dp[i][j] + S[j] for j in range(N))
for j, x in enumerate(sliding_max(val, M), 1):
dp[i+1][j] = max(dp[i+1][j], x - S[j])
print(dp[K][N])
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0