[题解]CF13C Sequence
给定\(N\)个数,每次操作可以选其中一个数\(+1\)或\(-1\)。请问要让这个数列不降,最少需要多少次操作?
我们用DP解决。
对\(a\)从小到大排序,存在\(c\)中。
我们用\(f[i][j]\)表示让前\(i\)个元素满足条件,而且这些元素最大值不超过\(c[j]\)的最小操作次数。
状态转移方程:\(f[i][j]=\min(f[i][j-1],f[i-1][j]+abs(a[i]-c[j]))\)。
最终答案就是\(\min(f[n][i])\)。
时间复杂度\(O(n^2)\)。
注意:
- 空间限制64MB,需要滚动数组。
- 开
long long。
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a[5010],b[5010];
int f[2][5010];
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i]=a[i];
}
sort(b+1,b+1+n);
f[0][0]=f[1][0]=LLONG_MAX;
bool pos=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
f[pos][j]=min(f[pos][j-1],f[!pos][j]+abs(a[i]-b[j]));
}
pos=!pos;
}
int ans=LLONG_MAX;
for(int i=1;i<=n;i++){
ans=min(ans,f[!pos][i]);
}
cout<<ans;
return 0;
}
附:加强版P4597 序列 sequence ~ 题解。
[题解]CF13C Sequence的更多相关文章
- [题解] 序列(sequence)
题目大意 给定一个长度为 \(N\) 的非负整数序列 \(A_1,A_2, \ldots ,A_N\),和一个正整数 \(M\).序列 \(A\) 满足 \(\forall 1 \le i \ ...
- LeetCode 题解 Permutation Sequence 需要优化!
题目大意:给出n和k,找到1..n这些数组成的有序全排列中的第k个. 首先,n的全排列可以分成n组,每一组由n-1个数组成. 例如 3的全排列,分成三组: 1 2 3 和 1 3 2 2 1 3 ...
- codeforces|CF13C Sequence
大概的题意就是每次可以对一个数加一或者减一,然后用最小的代价使得原序列变成不下降的序列. 因为是最小的代价,所以到最后的序列中的每个数字肯定在原先的序列中出现过.(大家可以想一下到底是为什么,或者简单 ...
- CF13C Sequence
嘟嘟嘟 偶然看到的这道题,觉得有点意思,就做了. 首先题里说修改后的数列只能出现修改前的数,那么状态之间的转移也就之可能在这些数之间. 令f[i][j]表示第 i 个数改成原序列第 j 小的数时的最小 ...
- CF13C Sequence(DP+离散化)
题目描述 给定一个序列,每次操作可以把某个数+1-1.要求把序列变成非降数列.求最少的修改次数. 输入输出样例 输入 #1 - 输出 #1 4 输入 #2 输出 #2 1 解题思路 这题是一道非常好题 ...
- cf13C Sequence(DP)
题意: N个数.a1...aN. 对于每个数而言,每一步只能加一或减一. 问最少总共需要多少步使得新序列是非递减序列. N (1 ≤ N ≤ 5000) 思路: *一个还不知道怎么证明的结论(待证): ...
- 重修 Slope Trick(看这篇绝对够!)
Slope Trick 算法存在十余载了,但是我没有找到多少拍手叫好的讲解 blog,所以凭借本人粗拙的理解来写这篇文章. 本文除标明外所有图片均为本人手绘(若丑见谅),画图真的不容易啊 qwq(无耻 ...
- LeetCode编程训练 - 拓扑排序(Topological Sort)
拓扑排序基础 拓扑排序用于解决有向无环图(DAG,Directed Acyclic Graph)按依赖关系排线性序列问题,直白地说解决这样的问题:有一组数据,其中一些数据依赖其他,问能否按依赖关系排序 ...
- 算法与数据结构基础 - 拓扑排序(Topological Sort)
拓扑排序基础 拓扑排序用于解决有向无环图(DAG,Directed Acyclic Graph)按依赖关系排线性序列问题,直白地说解决这样的问题:有一组数据,其中一些数据依赖其他,问能否按依赖关系排序 ...
- 算法与数据结构基础 - 图(Graph)
图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面 ...
随机推荐
- linux下wget静默模式下载
说明 在一些场景下,文件较大时,通过wget下载会展示时候进度,输出太多,这里我们如果想屏蔽输出可以采取静默模式 wget --quiet http://fileserver.test.com/cud ...
- Linux系统分析常用指令
一.查看CPU 1.top命令 1.1 功能说明 top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况. 1.2 使用语法 top [-d num ...
- centos上redis的安装
官网教程 redis安装官网 https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/ 可以右下方看到安装到各 ...
- Function AI 工作流发布:以 AI 重塑企业流程自动化
AI 工作流如何重塑企业自动化流程 在 AI 技术飞速发展的今天,企业的流程自动化方式也正在发生深刻变革.过去,流程自动化往往依赖于人工配置和固定规则,难以适应复杂.多变的业务场景.而如今, 随着 L ...
- 一文读懂HyperWorks的耦合求解功能
Altair Engineering, Inc. 是世界领先的工程设计技术开发者,同时,也是一家具有全球深厚工程技术底蕴的优秀CAE工程咨询公司.Altair公司在CAE建模.有限元分析.可视化.结构 ...
- Blazor学习之旅(9)用MudBlazor重构Todo
大家好,我是Edison. 在之前的学习之旅(3)开发一个Todo应用中,我们开发了一个简单版的Todo,这次我们基于MudBlazor来重构这个Todo应用. Todo V1回顾 在Blazor入门 ...
- 解决RuntimeError: Numpy is not available
解决RuntimeError: Numpy is not available 这是因为Numpy 版本太高,将现有Numpy卸载 pip uninstall numpy 安装numpy=1.26. ...
- 在C#中使用 System.Threading.Timer 实现定时任务
在C#中使用 System.Threading.Timer 实现定时任务 (qq.com) 前言 在编写应用程序过程中,高效的任务调度都是必不可少的,无论是在实现后台服务.自动化任务或者定期数据处理. ...
- dotNet6(.net core 6) Big5'不是受支持的编码名称。有关定义自定义编码的信息,请参阅有关编码的文档。RegisterProvider方法
https://www.skyfinder.cc/2021/12/17/net-core-register-encoding/#:~:text=%E5%9C%A8%E4%BD%BF%E7%94%A8. ...
- Java开发笔记(一百五十三)时间戳的获取和转换
日期时间是Java一个重要的数据类型,常见的日期时间格式通常为"yyyy-MM-dd HH:mm:ss",但是计算机中存储的日期时间并非字符串形式,而是长整型的时间戳.因为字符串又 ...