AcWing 273. 分级
原题链接
中等
作者:
橙柚哥哥
,
2024-04-17 18:49:50
,
所有人可见
,
阅读 4
求赞!
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2010;
ll n,m,a[N],b[N],dp[N][N],minDp[N],res;
void DP() {
minDp[0]=9e18;
for(ll i=1; i<=n; i++)
for(ll j=1; j<=m; j++) {
dp[i][j]=minDp[j]+abs(a[i]-b[j]);
minDp[j]=min(minDp[j-1],dp[i][j]);
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(ll i=1; i<=n; i++) {
cin>>a[i];
b[i]=a[i];
}
sort(b+1,b+n+1);
m=unique(b+1,b+n+1)-b-1;
DP();
res=minDp[m];
sort(b+1,b+m+1,greater<>());
memset(dp,0,sizeof(dp));
memset(minDp,0,sizeof(minDp));
DP();
cout<<min(res,minDp[m]);
return 0;
}