cf 13c
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\n",f[n-1]); return 0; }