poj 3666

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int SIZE = 2010;
int a[SIZE], c[SIZE], nums[SIZE];
int f[SIZE][SIZE];
int n;
int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
        nums[i] = a[i];
    }
    sort(nums+1, nums+n+1);
    int m = unique(nums+1, nums+n+1)-nums-1;
    for (int i = 1; i <= n; i++)
        c[i] = lower_bound(nums+1, nums+m+1, a[i]) - nums;
    memset(f, 0x3f, sizeof(f));
    for(int i=1;i<=m;i++)
       f[0][i]=0;
    for (int i = 1; i <= n; i++) {
        int temp = f[i-1][1];
        for (int j = 1; j <= m; j++) {
            f[i][j] = temp + abs(a[i] - nums[j]);
            temp = min(temp, f[i-1][j+1]);
        }
    }
    int ans = 1 << 30;
    for (int i = 1; i <= m; i++)
        ans = min(ans, f[n][i]);
    cout << ans << endl;
}

猜你喜欢

转载自www.cnblogs.com/lishengkangshidatiancai/p/10557311.html