rt, 输入这个会在“return 0”处跳出
4
1
2
3
4
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
int n;
ll ans;
vector<ll> a(2007), c(2007), minl(2007), dp[2007];
void ming(ll &x, ll y){
if(x > y) x = y;
return;
} int main(){
cin >> n;
for(int i = 0; i < n; i ++){
dp[i].resize(1, 0);
cin >> a[i];
c[i] = a[i];
} sort(c.begin(), c.begin() + n);
for(int i = 0; i < n; i ++){
for(int j = 0; j < n; j ++){
if(! j) dp[i][j] = abs(a[0] - c[i]);
else dp[i][j] = min(dp[i][j - 1], minl[j - 1]) + abs(a[0] - c[i]);
} ming(ans, dp[i][n - 1]);
for(int j = 0; j < n; j ++) ming(minl[j], dp[i][j]);
} reverse(a.begin(), a.begin() + n);
for(int i = 0; i < n; i ++) for(int j = 0; j < n; j ++) dp[i][j] = 0;
for(int i = 0; i < n; i ++) minl[i] = 0;
for(int i = 0; i < n; i ++){
for(int j = 0; j < n; j ++){
if(! j) dp[i][j] = abs(a[0] - c[i]);
else dp[i][j] = min(dp[i][j - 1], minl[j - 1]) + abs(a[0] - c[i]);
} ming(ans, dp[i][n - 1]);
for(int j = 0; j < n; j ++) ming(minl[j], dp[i][j]);
} cout << ans <<'\n';
return 0;
}