結果
| 問題 |
No.595 登山
|
| ユーザー |
はまやんはまやん
|
| 提出日時 | 2017-11-12 07:11:48 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 26 ms / 1,500 ms |
| コード長 | 1,724 bytes |
| コンパイル時間 | 1,430 ms |
| コンパイル使用メモリ | 167,332 KB |
| 実行使用メモリ | 8,256 KB |
| 最終ジャッジ日時 | 2024-11-24 22:34:13 |
| 合計ジャッジ時間 | 2,866 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 25 |
ソースコード
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
using namespace std; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); _main(); }
//---------------------------------------------------------------------------------------------------
/*---------------------------------------------------------------------------------------------------
∧_∧
∧_∧ (´<_` ) Welcome to My Coding Space!
( ´_ゝ`) / ⌒i
/ \ | |
/ / ̄ ̄ ̄ ̄/ |
__(__ニつ/ _/ .| .|____
\/____/ (u ⊃
---------------------------------------------------------------------------------------------------*/
typedef long long ll;
#define INF 1LL<<60
int N; ll P, H[201010];
ll dp[201010][2];
//---------------------------------------------------------------------------------------------------
void _main() {
cin >> N >> P;
rep(i, 0, N) cin >> H[i];
rep(i, 0, 201010) rep(dir, 0, 2) dp[i][dir] = INF;
dp[0][0] = 0;
rep(i, 0, N - 1) {
// ->を伸ばす遷移
dp[i + 1][0] = min(dp[i + 1][0], dp[i][0] + min(P, max(H[i + 1] - H[i], 0LL)));
// 今まで->だったのを<-とする遷移
dp[i + 1][1] = min(dp[i + 1][1], dp[i][0] + P);
// <-を伸ばす遷移
dp[i + 1][1] = min(dp[i + 1][1], dp[i][1] + min(P, max(H[i] - H[i + 1], 0LL)));
// 今まで<-だったのを->とする遷移
dp[i + 1][0] = min(dp[i + 1][0], dp[i][1] + P);
}
ll ans = min(dp[N - 1][0], dp[N - 1][1]);
cout << ans << endl;
}
はまやんはまやん