結果
| 問題 |
No.484 収穫
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-02-11 00:45:56 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 83 ms / 3,000 ms |
| コード長 | 1,010 bytes |
| コンパイル時間 | 564 ms |
| コンパイル使用メモリ | 72,448 KB |
| 実行使用メモリ | 67,328 KB |
| 最終ジャッジ日時 | 2024-10-13 13:09:35 |
| 合計ジャッジ時間 | 2,960 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 21 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void chmin(long long &x, long long y) {
x = min(x, y);
}
int main() {
int n;
cin >> n;
vector<long long> a(n + 1);
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
static long long dp[2020][2020][2];
const long long inf = 1e18;
fill_n(**dp, 2020 * 2020 * 2, inf);
dp[2][n][0] = a[1];
dp[1][n - 1][1] = a[n];
for (int d = n - 2; d >= 0; d--) {
for (int l = 1; l + d <= n; l++) {
int r = l + d;
chmin(dp[l + 1][r][0], max<long long>(l - (l - 1), a[l] - dp[l][r][0]) + dp[l][r][0]);
chmin(dp[l][r - 1][1], max<long long>(r - (l - 1), a[r] - dp[l][r][0]) + dp[l][r][0]);
chmin(dp[l + 1][r][0], max<long long>((r + 1) - l, a[l] - dp[l][r][1]) + dp[l][r][1]);
chmin(dp[l][r - 1][1], max<long long>((r + 1) - r, a[r] - dp[l][r][1]) + dp[l][r][1]);
}
}
long long ans = 1e18;
for (int i = 1; i <= n + 1; i++) {
chmin(ans, dp[i][i - 1][0]);
chmin(ans, dp[i][i - 1][1]);
}
cout << ans << endl;
}