/* -*- coding: utf-8 -*- * * 595.cc: No.595 登山 - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_N = 200000; /* typedef */ typedef long long ll; /* global variables */ int hs[MAX_N]; ll dpr[MAX_N], dpl[MAX_N]; /* subroutines */ inline ll minll(ll a, ll b) { return (a < b) ? a : b; } inline ll maxll(ll a, ll b) { return (a > b) ? a : b; } inline void setmin(ll &a, ll b) { if (a > b) a = b; } /* main */ int main() { int n, p; scanf("%d%d", &n, &p); for (int i = 0; i < n; i++) scanf("%d", &hs[i]); dpr[0] = 0; dpl[0] = p; for (int i = 1; i < n; i++) { ll dp0 = min(dpr[i - 1], dpl[i - 1]) + p; dpr[i] = min(dp0, dpr[i - 1] + max(0, hs[i] - hs[i - 1])); dpl[i] = min(dp0, dpl[i - 1] + max(0, hs[i - 1] - hs[i])); //printf("%d: dpr=%lld, dpl=%lld\n", i, dpr[i], dpl[i]); } printf("%lld\n", min(dpr[n - 1], dpl[n - 1])); return 0; }