• Codeforces 13C Sequence


    http://codeforces.com/contest/13/problem/C

    题目大意

    给定一个含有N个数的序列,要求你对一些数减掉或者加上某个值,使得序列变为非递减的,问你加减的值的总和最少是多少?

    思路:所有数最终构成的集合一定是一开始所有数构成数的集合的子集,因此dp[i][j]代表当前第i个数,递增序列在第j个数的代价。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    #define ll long long
    ll f[5005];
    int a[5005],p[5005],n;
    int read(){
        int t=0,f=1;char ch=getchar();
        while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
        while ('0'<=ch&&ch<='9'){t=t*10+ch-'0';ch=getchar();}
        return t*f;
    }
    int main(){
        n=read();for (int i=1;i<=n;i++) a[i]=read(),p[i]=a[i];
        std::sort(p+1,p+1+n);int j=1;
        for (int i=2;i<=n;i++) if (p[i]!=p[i-1]) p[++j]=p[i];
        p[0]=j;
        for (int i=1;i<=n;i++){
          for (j=1;j<=p[0];j++){
            if (j==1) f[j]+=std::abs(a[i]-p[j]);
            else f[j]=std::min(f[j-1],f[j]+std::abs(a[i]-p[j]));
            }
        }
        printf("%I64d
    ",f[p[0]]);
    }
  • 相关阅读:
    vue.js 第二课
    vue.js学习(第一课)
    2016-11-14看张大神的微博总结
    这几天的工作总结:
    调了一天的兼容总结下
    鸭式辩论
    prototype 原型
    前端ps常用的小技巧
    Android的开始之相对布局
    Android的开始之线性布局
  • 原文地址:https://www.cnblogs.com/qzqzgfy/p/5666737.html
Copyright © 2020-2023  润新知