大概的题意就是每次可以对一个数加一或者减一,然后用最小的代价使得原序列变成不下降的序列。

因为是最小的代价,所以到最后的序列中的每个数字肯定在原先的序列中出现过。(大家可以想一下到底是为什么,或者简单举几个例子验证一下)

我们用一个c数组拷贝原先的a数组,然后进行从小到大排序。

那么之后我们考虑DP,因为是5000的数据,考虑\(n^2\)做法。设\(dp[i][j]\)表示前i个已经符合要求,而且最大数不大于原序列第j个元素最小需要的代价。

那么我们可以得出转移方程\(dp[i][j]=min(dp[i][j-1],dp[i-1][j]+abs(a[i]-c[j])\)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define MAXN 5010
using namespace std;
int n;
long long ans=(long long)1e18;
long long a[MAXN],c[MAXN],dp[2][MAXN];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%I64d",&a[i]);
memcpy(c,a,sizeof(a));
sort(&c[1],&c[n+1]);
memset(dp,0x3f,sizeof(dp));
for(int i=1;i<=n;i++) dp[0][i]=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
dp[1][j]=min(dp[1][j-1],dp[0][j]+abs(a[i]-c[j]));
swap(dp[1],dp[0]);
}
for(int i=1;i<=n;i++) ans=min(ans,dp[0][i]);
cout<<ans<<endl;
return 0;
}

codeforces|CF13C Sequence的更多相关文章

  1. codeforces hungry sequence 水题

    题目链接:http://codeforces.com/problemset/problem/327/B 这道题目虽然超级简单,但是当初我还真的没有想出来做法,囧,看完别人的代码恍然大悟. #inclu ...

  2. Codeforces 13C Sequence

    http://codeforces.com/contest/13/problem/C 题目大意 给定一个含有N个数的序列,要求你对一些数减掉或者加上某个值,使得序列变为非递减的,问你加减的值的总和最少 ...

  3. Codeforces 327B-Hungry Sequence(素数筛)

    B. Hungry Sequence time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  4. [CodeForces]1059C Sequence Transformation

    构造题. 我递归构造的,发现如果N>3的话就优先删奇数,然后就把删完的提取一个公约数2,再重复操作即可. 具体原因我觉得是因为对于一个长度大于3的序列,2的倍数总是最多,要令字典序最大,所以就把 ...

  5. Codeforces 13C Sequence dp

    题目链接:http://codeforces.com/problemset/problem/13/C 题意: 给定n长的序列 每次操作能够给每一个数++或-- 问最少须要几步操作使得序列变为非递减序列 ...

  6. CodeForces - 1059C Sequence Transformation (GCD相关)

    Let's call the following process a transformation of a sequence of length nn. If the sequence is emp ...

  7. Codeforces 13C Sequence --DP+离散化

    题意:给出一个 n (1 <= n <= 5000)个数的序列 .每个操作可以把 n 个数中的某一个加1 或 减 1.问使这个序列变成非递减的操作数最少是多少 解法:定义dp[i][j]为 ...

  8. Codeforces 67C Sequence of Balls 编辑距离 dp

    题目链接:点击打开链接 有一个交换操作比較特殊,所以记录每一个点距离自己近期的那个字符的位置 然后交换就相当于把第一行要交换的2个字符 之间的字符都删掉 把第二行要交换的2个字符 之间的字符都插入第一 ...

  9. CF13C Sequence

    嘟嘟嘟 偶然看到的这道题,觉得有点意思,就做了. 首先题里说修改后的数列只能出现修改前的数,那么状态之间的转移也就之可能在这些数之间. 令f[i][j]表示第 i 个数改成原序列第 j 小的数时的最小 ...

随机推荐

  1. Mysql 性能优化 ( my.cnf )

    简介: Mysql 参数优化 一.Mysql 源码编译参数 shell > yum -y install gcc gcc-c++ make cmake ncurses-devel zlib-de ...

  2. requesth获取参数

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) t ...

  3. 团队作业4Alpha冲刺

    仓库地址:https://gitee.com/ILoveFunGame/game_strategy_network.git 第一天 2018/6/13 1.1 今日完成任务情况以及遇到的问题. 1.1 ...

  4. ConditionalAttribute 类

    指示编译器应忽略方法调用或属性,除非已定义指定的条件编译符号. #define CONDITION1#define CONDITION2using System;using System.Diagno ...

  5. .net中delegate的使用

    js中的写法: var GetEntityList = function(pParameter){ var list =[]; return list; }; var aEntityList = Ge ...

  6. 这几天搞UNITY遇到的坑

    都是在IPHONE设备上遇到的,UNITY版本是5.4.4f1 1.EASY AR出现扫描蓝线绿块的,是因为不是EASY AR的CameraDeviceBehavior默认参数1280X720 2.自 ...

  7. php设置错误,错误记录

    //设置错误级别. error_reporting(E_ALL);  //显示所有错误 error_reporting(E_ALL&~E_NOTICE);  //显示所有错误但不显示提示级别的 ...

  8. Opencv读取图片像素值

    #include <iostream>#include <opencv2/opencv.hpp> using namespace std;using namespace cv; ...

  9. ConcurrentHashMap的实现原理与使用

    一.适应ConcurrentHashMap的原因 HashMap存在线程不安全的问题,HashTable效率十分低下,因此,ConcurrentHashMap有了合适的登场机会. (1)HashTab ...

  10. EZOJ #224

    传送门 分析 首先我们发现要让答案最小,或运算一定是没有用的 我们还可以发现a^b = a&(~b) 所以异或运算也没有用 于是我们只考虑否和与 我们还会得到一个性质就是没增加一个数一定会让答 ...