結果
| 問題 |
No.484 収穫
|
| コンテスト | |
| ユーザー |
r_dream0
|
| 提出日時 | 2017-02-17 01:21:12 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 61 ms / 3,000 ms |
| コード長 | 1,976 bytes |
| コンパイル時間 | 602 ms |
| コンパイル使用メモリ | 73,940 KB |
| 実行使用メモリ | 66,092 KB |
| 最終ジャッジ日時 | 2024-10-13 13:15:14 |
| 合計ジャッジ時間 | 1,991 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 21 |
ソースコード
#include <iostream>
#include <cassert>
#include <vector>
#include <limits>
using namespace std;
int64_t N;
vector<int64_t> A;
// 残り区間: [L, R)
int64_t solve(int L, int R) {
return 0;
}
int64_t dp[2001][2001][2];
const int64_t INF = numeric_limits<int64_t>::max() / 3;
int main() {
cin >> N;
A.resize(N);
for(auto &a: A) cin >> a;
int64_t answer = numeric_limits<int64_t>::max();
for(int i = 0; i <= N; i++) {
for(int j = 0; j <= N; j++) {
for(int k = 0; k < 2; k++) {
dp[i][j][k] = INF;
}
}
}
// 開始位置を決める
for(int i = 0; i < N; i++) {
// 左側に移動
int64_t cost = A[i] + 2 * i;
for(int j = 0; j < i; j++) {
cost = max(cost, A[j] + i - j);
}
dp[i + 1][N][0] = cost;
// 右側に移動
cost = A[i] + (N - i - 1) * 2;
for(int j = i + 1; j < N; j++) {
cost = max(cost, A[j] + j - i);
}
dp[0][i][1] = cost;
}
for(int width = N; width >= 1; width--) {
for(int i = 0; i <= N - width; i++) {
// [i, i + width)
// left -> right
int64_t cur = dp[i][i + width][0];
if(cur < INF) {
assert(i > 0);
// 現在地i - 1
// 単純に一つ移動する
dp[i + 1][i + width][0] = min(dp[i + 1][i + width][0], max(cur + 1, A[i]));
int64_t arrive = max(A[i + width - 1], cur + width);
dp[i][i + width - 1][1] = min(dp[i][i + width - 1][1], arrive);
}
cur = dp[i][i + width][1];
if(cur < INF) {
assert(i + width < N);
// 現在地i + width
// 単純に一つ移動する
dp[i][i + width - 1][1] = min(dp[i][i + width - 1][1], max(cur + 1, A[i + width - 1]));
int64_t arrive = max(A[i], cur + width);
dp[i + 1][i + width][0] = min(dp[i + 1][i + width][0], arrive);
}
}
}
for(int i = 0; i <= N; i++) {
for(int k = 0; k < 2; k++) {
answer = min(answer, dp[i][i][k]);
}
}
cout << answer << endl;
}
r_dream0