#include<bits/stdc++.h>
#define endl '\n'
#define pb push_back
using namespace std;
void speed()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
}
long long n, a[2005];
long long dp[2005][6005][3], pref[2005][6005][3];
unordered_map < long long, long long > code, decode;
long long t[6000 * 4][3];
long long cpos;
void build(long long i, long long l, long long r, long long type)
{
if(l == r)
{
t[i][type] = dp[cpos][l][type];
return;
}
long long mid = (l + r)/2;
build(2*i, l, mid, type);
build(2*i+1, mid+1, r, type);
t[i][type] = min(t[2*i][type], t[2*i+1][type]);
}
long long ql, qr;
long long query(long long i, long long l, long long r, long long type)
{
//cout << i << " --- " << l << " " << type << endl;
if(qr < ql)return 1e17;
if(qr < l || ql > r)return 1e17;
if(ql <= l && r <= qr)return t[i][type];
long long mid = (l + r)/2;
return min(query(2*i, l, mid, type), query(2*i+1, mid+1, r, type));
}
int main()
{
speed();
vector < long long > g;
cin >> n;
for (long long i = 1; i <= n; ++ i)
{
cin >> a[i];
g.pb(a[i]);
g.pb(a[i]-1);
g.pb(a[i+1]);
}
sort(g.begin(), g.end());
long long cnt = 0;
long long last = -1;
for (long long i = 0; i < g.size(); ++ i)
{
if(last == g[i])continue;
code[g[i]] = cnt;
decode[cnt] = g[i];
cnt ++;
last = g[i];
}
for (long long i = 1; i <= n; ++ i)
{
for (long long j = 0; j < cnt; ++ j)
{
for (long long t = 0; t <= 2; ++ t)
dp[i][j][t] = 1e17;
}
}
long long best = 1e17;
for (long long i = 0; i < cnt; ++ i)
{
dp[1][i][0] = abs(decode[i] - a[1]);
}
cpos = 1;
for (long long t = 0; t < 3; ++ t)
{
build(1, 0, cnt-1, t);
}
for (long long i = 2; i <= n; ++ i)
{
for (long long h = 0; h < cnt; ++ h)
{
for (long long t = 0; t <= 2; ++ t)
{
dp[i][h][t] = min(dp[i][h][t], dp[i-1][h][t] + abs(a[i] - decode[h]));
if(t == 1)
{
ql = h+1;
qr = cnt-1;
dp[i][h][t] = min(dp[i][h][t], 1LL * min(query(1, 0, cnt-1, 2), query(1, 0, cnt-1, 0)) + abs(a[i] - decode[h]));
}
else if(t == 2)
{
ql = 0;
qr = h-1;
dp[i][h][t] = min(dp[i][h][t], 1LL * min(query(1, 0, cnt-1, 1), query(1, 0, cnt-1, 0)) + abs(a[i] - decode[h]));
}
}
}
// cout << "ended " << i << endl;
cpos = i;
for (long long t = 0; t < 3; ++ t)
{
build(1, 0, cnt-1, t);
//cout << "done " << t << endl;
}
// cout << "ended again " << i << endl;
}
for (long long h = 0; h <= cnt-1; ++ h)
{
for (long long t = 0; t < 3; ++ t)
{
best = min(best, dp[n][h][t]);
}
}
cout << best << endl;
return 0;
}