codeforces|CF13C Sequence
大概的题意就是每次可以对一个数加一或者减一,然后用最小的代价使得原序列变成不下降的序列。
因为是最小的代价,所以到最后的序列中的每个数字肯定在原先的序列中出现过。(大家可以想一下到底是为什么,或者简单举几个例子验证一下)
我们用一个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的更多相关文章
- codeforces hungry sequence 水题
题目链接:http://codeforces.com/problemset/problem/327/B 这道题目虽然超级简单,但是当初我还真的没有想出来做法,囧,看完别人的代码恍然大悟. #inclu ...
- Codeforces 13C Sequence
http://codeforces.com/contest/13/problem/C 题目大意 给定一个含有N个数的序列,要求你对一些数减掉或者加上某个值,使得序列变为非递减的,问你加减的值的总和最少 ...
- Codeforces 327B-Hungry Sequence(素数筛)
B. Hungry Sequence time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- [CodeForces]1059C Sequence Transformation
构造题. 我递归构造的,发现如果N>3的话就优先删奇数,然后就把删完的提取一个公约数2,再重复操作即可. 具体原因我觉得是因为对于一个长度大于3的序列,2的倍数总是最多,要令字典序最大,所以就把 ...
- Codeforces 13C Sequence dp
题目链接:http://codeforces.com/problemset/problem/13/C 题意: 给定n长的序列 每次操作能够给每一个数++或-- 问最少须要几步操作使得序列变为非递减序列 ...
- CodeForces - 1059C Sequence Transformation (GCD相关)
Let's call the following process a transformation of a sequence of length nn. If the sequence is emp ...
- Codeforces 13C Sequence --DP+离散化
题意:给出一个 n (1 <= n <= 5000)个数的序列 .每个操作可以把 n 个数中的某一个加1 或 减 1.问使这个序列变成非递减的操作数最少是多少 解法:定义dp[i][j]为 ...
- Codeforces 67C Sequence of Balls 编辑距离 dp
题目链接:点击打开链接 有一个交换操作比較特殊,所以记录每一个点距离自己近期的那个字符的位置 然后交换就相当于把第一行要交换的2个字符 之间的字符都删掉 把第二行要交换的2个字符 之间的字符都插入第一 ...
- CF13C Sequence
嘟嘟嘟 偶然看到的这道题,觉得有点意思,就做了. 首先题里说修改后的数列只能出现修改前的数,那么状态之间的转移也就之可能在这些数之间. 令f[i][j]表示第 i 个数改成原序列第 j 小的数时的最小 ...
随机推荐
- UNITY UI字体模糊的原因
根本原因:像素少. 解决办法:字体的 font size将像素设置大些,然后用scale来缩放大小
- delphi三层架构
我们的delphi程序很多是以前开发的,采用典型的CS架构,由程序直接连接数据库.现在需要改成在外网可以直接操作软件.先把数据库搬到了阿里云上,测试发现直接连数据库和VPN连接测试速度很慢,直连还容易 ...
- 将中国标准时间转成yyyy-MM-dd
public static void main(String[] args) throws ParseException { String s = "Tue Jul 12 00:00:00 ...
- [bzoj2212]Tree Rotations(线段树合并)
解题关键:线段树合并模板题.线段树合并的题目一般都是权值线段树,因为结构相同,求逆序对时,遍历权值线段树的过程就是遍历所有mid的过程,所有能求出所有逆序对. #include<iostream ...
- 每个内存大小:sudo dmidecode -t memory |grep -A16 "Memory Device$" |grep "Size:"
CPU: 型号:grep "model name" /proc/cpuinfo |awk -F ':' '{print $NF}' 数量:lscpu |grep "CPU ...
- 621. Task Scheduler CPU任务间隔分配器
[抄题]: Given a char array representing tasks CPU need to do. It contains capital letters A to Z where ...
- 14. Longest Common Prefix 最长的公共字符串开头
[抄题]: Write a function to find the longest common prefix string amongst an array of strings. 在 " ...
- 解决git无法clone地址为https的库
一.问题描述 早上在学习<Spark快速大数据分析>的时候,需要下载书本的实例代码,于是用git clone一下给出的库: https://github.com/databricks/le ...
- realsense pcl git
https://github.com/Ext4FAT/Registration vc++ pcl realsense 矿泉水瓶子 https://github.com/dBeker/PCL-Real ...
- Django框架请求生命周期
先看一张图吧! 1.请求生命周期 - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行初次封装,然后将请求交给web框架(Flask.Django) - 中间件,帮助我们对请求进行校 ...