CF 1839 D

news/2024/9/19 15:34:40/文章来源:https://www.cnblogs.com/yaosicheng124/p/18416688

题目描述

给定 \(N\) 个不同颜色的小球。你可以进行以下操作:

  • 插入一个颜色为 \(0\) 的小球,此操作最多执行 \(k\) 次。
  • 选择一个非零球,使得该球与至少一个 \(0\) 小球相邻。并把该小球移动到任意位置。这样会花费 \(1\) 的代价。

对于每个 \(1\le k \le N\) 求出将序列变成一个去除 \(0\) 后升序的序列所需最小代价。

思路

定义 \(dp_{i,j}\) 表示把 \([1,i]\) 排序,使用 \(j\)\(0\) 小球所需的最小代价。

如果 \(a_i > a_{i-1}\),那么我们有转移 \(dp_{i,j}\leftarrow dp_{i-1,j}\)

否则,对于所有 \(0\le k < i-1且a_k<a_i\),那么我们有 \(dp_{i,j}\leftarrow dp_{k,j-1}+i-k-1\),因为此时使用了一个 \(0\) 球,并且除端点外区间中每个点都需要移动一次。

空间复杂度 \(O(N^2)\),时间复杂度 \(O(N^3)\)

代码

#include<bits/stdc++.h>
using namespace std;const int MAXN = 505, INF = MAXN;int t, n, a[MAXN], dp[MAXN][MAXN], ans;void Solve() {cin >> n;for(int i = 1; i <= n; ++i) {cin >> a[i];}for(int i = 0; i <= n + 1; ++i) {for(int j = 0; j <= n; ++j) {dp[i][j] = INF;}}dp[0][0] = 0, a[n + 1] = n + 1;for(int i = 1; i <= n + 1; ++i) {for(int j = 0; j <= n; ++j) {if(a[i] > a[i - 1]) {dp[i][j] = dp[i - 1][j];}if(j) {for(int k = 0; k < i - 1; ++k) {if(a[k] < a[i]) {dp[i][j] = min(dp[i][j], dp[k][j - 1] + i - k - 1);}}}}}ans = dp[n + 1][0];for(int i = 1; i <= n; ++i) {ans = min(ans, dp[n + 1][i]);cout << ans << " \n"[i == n];}
}int main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);for(cin >> t; t--; Solve()) {}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/798229.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

教小模型进行推理

https://arxiv.org/abs/2212.08410 思维链提示在基础层面上是如此成功,以至于它产生了一些被称为 x 链现象的东西。谷歌研究院探索了如何使用 llm 为现有数据集生成 CoT 数据本体,然后如何在 CoT 上微调较小的语言模型。 介绍 众所周知,思维链提示提高了大型语言模型的推理能…

[WesternCTF2018]shrine

打开题目就得到了python代码 import flask import os #导包 app = flask.Flask(__name__) #创建一个flask实例, app.config[FLAG] = os.environ.pop(FLAG) #从操作系统的环境变量中读取名为FLAG的值,并将其存储在Flask的配置中,POP:读取后删除该环境变量@app.route(/) #定义…

MySQL 8.0 Public Key Retrieval is not allowed 错误的解决方法

原文:MySQL 8.0 Public Key Retrieval is not allowed 错误的解决方法 参考:Connection Java - MySQL : Public Key Retrieval is not allowed在使用 MySQL 8.0 时重启应用后提示com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieva…

MobaXterm 密钥生成器

1、MobaXterm 密钥生成器,代码仓库地址: https://gitcode.com/gh_mirrors/mo/MobaXterm-keygen/blob/master/MobaXterm-Keygen.py 2、也可以用我打包好的exe程序,不用安装python环境: https://pan.baidu.com/s/1jo85pQc_kfWhcYmZcc49CQ 提取码:ws10 3、源码:#/usr/bin/e…

Linux引导启动程序(boot)

概述 本章主要描述boot/目录中的三个汇编代码文件,见列表6-1所示。正如在前一章中提到的,这三个文件虽然都是汇编程序,但却使用了两种语法格式。bootsect.s和setup.s是实模式下运行的16位代码程序,采用近似于Intel的汇编语言语法并且需要使用Intel 8086汇编编译器和连接器as86和…

9、const修饰指针

*代表指针,这样有助于记忆和区别这三种

day1闯关作业小结[linux基础知识]

完成SSH连接与端口映射并运行hello_world.py 1.进入InternStudio https://studio.intern-ai.org.cn/, 创建个人开发机2.使用密码进行SSH远程连接并进行端口映射3.运行hello_world.py

白云龙期货投资-第三讲

反转形态**头肩底(顶) 双底(顶) 三重底(顶) 圆弧底(顶)**持续形态**三角形 旗形 楔行 扩散三角形 收缩三角形**K线形态(反转形态,持续形态) 反转形态 头肩底(顶) 双底(顶) 三重底(顶) 圆弧底(顶) 持续形态 三角形 旗形 楔行 扩散三角形 收缩三角形 头肩顶头肩底双底(双顶)下…

java的方法和数组

什么是方法呢? 就类似c语言的函数 返回类型 方法名 形式参数列表 方法名最好使用小驼峰的形式,在java中方法不可以嵌套使用, 方法的调用: 就是在main方法里面写上调用的方法名加上需要传输的值,创建一个和方…

mongo集群同步数据异常,手动同步节点副本数据

转载请注明出处: 数据同步方案当副本集节点的复制进程落后太多,以至于主节点覆盖了该节点尚未复制的 oplog 条目时,副本集节点就会变为“陈旧”。节点跟不上,就会变得“陈旧”。出现这种情况时,必须删除副本集节点的数据,然后执行初始同步,从而完全重新同步该节点。 Mon…

7、函数分文件编写

1、swap.h2、swap.cpp3、使用