1 //把一个序列转换成非严格递增序列的最小花费 POJ 3666
2 //dp[i][j]:把第i个数转成第j小的数,最小花费
3
4 #include <iostream>
5 #include <cstdio>
6 #include <cstdlib>
7 #include <algorithm>
8 #include <vector>
9 #include <math.h>
10 // #include <memory.h>
11 using namespace std;
12 #define LL long long
13 typedef pair<int,int> pii;
14 const int inf = 0x3f3f3f3f;
15 const LL MOD =100000000LL;
16 const int N = 3000+10;
17 const double eps = 1e-8;
18 void fre() {freopen("in.txt","r",stdin);}
19 void freout() {freopen("out.txt","w",stdout);}
20 inline int read() {int x=0,f=1;char ch=getchar();while(ch>'9'||ch<'0') {if(ch=='-') f=-1; ch=getchar();}while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();}return x*f;}
21
22 int a[N],b[N];
23 LL dp[N][N];
24 int main(){
25 int n;
26 scanf("%d",&n);
27 for(int i=1;i<=n;i++){
28 scanf("%d",&a[i]);
29 b[i]=a[i];
30 }
31 sort(b+1,b+1+n);
32 for(int i=1;i<=n;i++){
33 dp[1][i]=abs(a[1]-b[i]);
34 }
35 for(int i=2;i<=n;i++){
36 LL minn=1e18;
37 for(int j=1;j<=n;j++){
38 minn=min(minn,dp[i-1][j]);
39 dp[i][j]=minn+abs(a[i]-b[j]);
40 }
41 }
42 LL ans=1e18;
43 for(int i=1;i<=n;i++){
44 ans=min(ans,dp[n][i]);
45 }
46 cout<<ans<<endl;
47 return 0;
48 }