Little Petya likes to play very much. And most of all he likes to play the following game:
He is given a sequence of N integer numbers. At each step it is allowed to increase the value of any number by 1 or to decrease it by 1. The goal of the game is to make the sequence non-decreasing with the smallest number of steps. Petya is not good at math, so he asks for your help.
The sequence a is called non-decreasing if a1 ≤ a2 ≤ ... ≤ aN holds, where N is the length of the sequence.
The first line of the input contains single integer N (1 ≤ N ≤ 5000) — the length of the initial sequence. The following N lines contain one integer each — elements of the sequence. These numbers do not exceed 109 by absolute value.
Output one integer — minimum number of steps required to achieve the goal.
5
3 2 -1 2 11
4
5
2 1 1 1 1
1
f[i][j]=f[i][j-1],f[i-1][j]+a[i]-b[j];
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define LL long long
LL n,a[5010],b[5010],f[5010];
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%I64d",&a[i]);
for(int i=0;i<n;i++)
b[i]=a[i];
sort(b,b+n);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
f[j]+=abs(a[i]-b[j]);
if(j>0)
f[j]=min(f[j],f[j-1]);
}
}
printf("%I64d
",f[n-1]);
return 0;
}