#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
#define maxn 3000
#define ll long long
ll dp[maxn][maxn];
int a[maxn],b[maxn],n;
void solve()
{
ll minn;
for(int i=1;i<=n;i++)
{
minn=dp[i-1][1];
for(int j=1;j<=n;j++)
{
minn=min(minn,dp[i-1][j]);
dp[i][j]=abs(a[i]-b[j])+minn;
}
}
ll ans=dp[n][1];
for(int i=1;i<=n;i++)
ans=min(ans,dp[n][i]);
printf("%lld\n",ans);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
b[i]=a[i];
}
sort(b+1,b+1+n);
solve();
return 0;
}
POJ3666 Making the Grade [DP,离散化]
最新推荐文章于 2019-05-21 19:12:51 发布