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的更多相关文章

  1. [题解] 序列(sequence)

    题目大意 给定一个长度为 \(N\)​ 的非负整数序列 \(A_1,A_2, \ldots ,A_N\)​,和一个正整数 \(M\)​.序列 \(A\) ​满足 \(\forall 1 \le i \ ...

  2. LeetCode 题解 Permutation Sequence 需要优化!

    题目大意:给出n和k,找到1..n这些数组成的有序全排列中的第k个. 首先,n的全排列可以分成n组,每一组由n-1个数组成. 例如  3的全排列,分成三组: 1 2 3  和 1 3 2 2 1 3 ...

  3. codeforces|CF13C Sequence

    大概的题意就是每次可以对一个数加一或者减一,然后用最小的代价使得原序列变成不下降的序列. 因为是最小的代价,所以到最后的序列中的每个数字肯定在原先的序列中出现过.(大家可以想一下到底是为什么,或者简单 ...

  4. CF13C Sequence

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

  5. CF13C Sequence(DP+离散化)

    题目描述 给定一个序列,每次操作可以把某个数+1-1.要求把序列变成非降数列.求最少的修改次数. 输入输出样例 输入 #1 - 输出 #1 4 输入 #2 输出 #2 1 解题思路 这题是一道非常好题 ...

  6. cf13C Sequence(DP)

    题意: N个数.a1...aN. 对于每个数而言,每一步只能加一或减一. 问最少总共需要多少步使得新序列是非递减序列. N (1 ≤ N ≤ 5000) 思路: *一个还不知道怎么证明的结论(待证): ...

  7. 重修 Slope Trick(看这篇绝对够!)

    Slope Trick 算法存在十余载了,但是我没有找到多少拍手叫好的讲解 blog,所以凭借本人粗拙的理解来写这篇文章. 本文除标明外所有图片均为本人手绘(若丑见谅),画图真的不容易啊 qwq(无耻 ...

  8. LeetCode编程训练 - 拓扑排序(Topological Sort)

    拓扑排序基础 拓扑排序用于解决有向无环图(DAG,Directed Acyclic Graph)按依赖关系排线性序列问题,直白地说解决这样的问题:有一组数据,其中一些数据依赖其他,问能否按依赖关系排序 ...

  9. 算法与数据结构基础 - 拓扑排序(Topological Sort)

    拓扑排序基础 拓扑排序用于解决有向无环图(DAG,Directed Acyclic Graph)按依赖关系排线性序列问题,直白地说解决这样的问题:有一组数据,其中一些数据依赖其他,问能否按依赖关系排序 ...

  10. 算法与数据结构基础 - 图(Graph)

    图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面 ...

随机推荐

  1. linux下wget静默模式下载

    说明 在一些场景下,文件较大时,通过wget下载会展示时候进度,输出太多,这里我们如果想屏蔽输出可以采取静默模式 wget --quiet http://fileserver.test.com/cud ...

  2. Linux系统分析常用指令

    一.查看CPU 1.top命令 1.1 功能说明 top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况. 1.2 使用语法 top [-d num ...

  3. centos上redis的安装

    官网教程 redis安装官网 https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/ 可以右下方看到安装到各 ...

  4. Function AI 工作流发布:以 AI 重塑企业流程自动化

    AI 工作流如何重塑企业自动化流程 在 AI 技术飞速发展的今天,企业的流程自动化方式也正在发生深刻变革.过去,流程自动化往往依赖于人工配置和固定规则,难以适应复杂.多变的业务场景.而如今, 随着 L ...

  5. 一文读懂HyperWorks的耦合求解功能

    Altair Engineering, Inc. 是世界领先的工程设计技术开发者,同时,也是一家具有全球深厚工程技术底蕴的优秀CAE工程咨询公司.Altair公司在CAE建模.有限元分析.可视化.结构 ...

  6. Blazor学习之旅(9)用MudBlazor重构Todo

    大家好,我是Edison. 在之前的学习之旅(3)开发一个Todo应用中,我们开发了一个简单版的Todo,这次我们基于MudBlazor来重构这个Todo应用. Todo V1回顾 在Blazor入门 ...

  7. 解决RuntimeError: Numpy is not available

    解决RuntimeError: Numpy is not available   这是因为Numpy 版本太高,将现有Numpy卸载 pip uninstall numpy 安装numpy=1.26. ...

  8. 在C#中使用 System.Threading.Timer 实现定时任务

    在C#中使用 System.Threading.Timer 实现定时任务 (qq.com) 前言 在编写应用程序过程中,高效的任务调度都是必不可少的,无论是在实现后台服务.自动化任务或者定期数据处理. ...

  9. 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. ...

  10. Java开发笔记(一百五十三)时间戳的获取和转换

    日期时间是Java一个重要的数据类型,常见的日期时间格式通常为"yyyy-MM-dd HH:mm:ss",但是计算机中存储的日期时间并非字符串形式,而是长整型的时间戳.因为字符串又 ...