結果
問題 |
No.484 収穫
|
ユーザー |
![]() |
提出日時 | 2025-06-12 20:04:58 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,189 bytes |
コンパイル時間 | 216 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 537,472 KB |
最終ジャッジ日時 | 2025-06-12 20:11:53 |
合計ジャッジ時間 | 29,811 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 WA * 1 |
other | AC * 9 MLE * 12 |
ソースコード
def main(): import sys input = sys.stdin.read().split() N = int(input[0]) A = list(map(int, input[1:N+1])) INF = float('inf') dp = [[[INF] * 2 for _ in range(N+2)] for __ in range(N+2)] for i in range(1, N+1): dp[i][i][0] = A[i-1] dp[i][i][1] = A[i-1] for length in range(1, N+1): for l in range(1, N - length + 2): r = l + length - 1 # Check left end current = dp[l][r][0] if current != INF: # Move left to l-1 if l > 1: new_l = l - 1 new_r = r time_needed = current + 1 new_time = max(time_needed, A[new_l - 1]) if new_time < dp[new_l][new_r][0]: dp[new_l][new_r][0] = new_time # Move right to r+1 if r < N: new_l = l new_r = r + 1 move_time = (new_r - l) time_needed = current + move_time new_time = max(time_needed, A[new_r - 1]) if new_time < dp[new_l][new_r][1]: dp[new_l][new_r][1] = new_time # Check right end current = dp[l][r][1] if current != INF: # Move right to r+1 if r < N: new_l = l new_r = r + 1 time_needed = current + 1 new_time = max(time_needed, A[new_r - 1]) if new_time < dp[new_l][new_r][1]: dp[new_l][new_r][1] = new_time # Move left to l-1 if l > 1: new_l = l - 1 new_r = r move_time = (r - new_l) time_needed = current + move_time new_time = max(time_needed, A[new_l - 1]) if new_time < dp[new_l][new_r][0]: dp[new_l][new_r][0] = new_time result = min(dp[1][N][0], dp[1][N][1]) print(result) if __name__ == "__main__": main()