简要题意

给出一个长度为 \(n\) 的序列 \(A\),你需要执行下面的操作,将这个序列变成回文序列:

  • 在序列左右侧或中间插入一个元素,元素数值任意。
  • 删除一个元素。
  • 更改一个元素的值。

\(1 \le n,A_i \le 3000\)

思路

区间DP好题!

首先我们设 \(f_{i,j}\) 为区间 \([i,j]\) 变成回文序列的操作次数。

如果每一次转移的时候都重新计算,那肯定是不合适的,这里我们做一个假设,假设如果枚举到了 \([i,j]\),那么 \([x,y]\) \((i \lt x \le y \lt j)\)(子区间)已经变成了回文序列了。

那么如果 \(A_i=A_j\),那么不必进行操作,也就是 \(f_{i,j}=f_{i+1,j-1}\)。(区间 \([i,j]\) 去头去尾后得到 \([i+1,j-1]\))

如果 \(A_i \neq A_j\),那么我们一定需要操作:

  • 如果是更改元素的值,那么一定要更改 \(i\) 或者 \(j\) 的,比如 \(A_i = A_j\) 或 \(A_j = A_i\),这种情况就是继承以前的 \(f_{i+1,j-1}\)。
  • 如果是删除元素的值,那么也一定要删除 \(i\) 或者 \(j\)。删除 \(i\) 就是 \(f_{i+1,j}\),删除 \(j\) 就是 \(f_{i,j-1}\)(谁被删除了就删掉谁)

另外还要记住,执行了操作操作次数就要加上 \(1\)。

至此,我们已经推出了状态转移方程,整理如下:

\[f_{i,j}=\left\{
\begin{aligned}
& f_{i+1,j-1} (A_i = A_j) \\
& \min(f_{i+1,j-1},f_{i+1,j},f_{i,j-1})+1 (A_i \neq A_j)
\end{aligned}
\right.
\]

最后我们来讨论一下如何做到一开始我们的假设。我怕们可以枚举区间长度 \(L\),再枚举区间左端点 \(i\),这样 \(j=i+L-1\),子区间的长度必定小于 \(L\),假设得到满足。

该算法时间复杂度 \(O(n^{2})\),可以通过本题。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std; int n;
int a[3005],f[3005][3005]; inline int min(int x,int y,int z){
return min(x,min(y,z));
} signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int length=2;length<=n;length++){
for(int l=1,r=l+length-1;l<=n&&r<=n;l++,r++){
if(a[l]==a[r]){
f[l][r]=f[l+1][r-1];
}
else{
f[l][r]=min(f[l+1][r-1],f[l+1][r],f[l][r-1])+1;
}
}
}
cout<<f[1][n];
return 0;
}

AC Record

题解P3847 [TJOI2007]调整队形的更多相关文章

  1. 洛谷P3847 [TJOI2007]调整队形

    P3847 [TJOI2007]调整队形 题目背景 学校艺术节上,规定合唱队要参加比赛,各个队员的衣服颜色不能很混乱:合唱队员应排成一横排,且衣服颜色必须是左右对称的. 例如:“红蓝绿蓝红”或“红蓝绿 ...

  2. [TJOI2007] 调整队形

    题目链接 区间 DP 的经典模型之一. 题意是将整个串通过四种操作变成一个回文串,根据套路,不难设计出 dp[i][j] 表示为使区间 [i, j] 成为回文串的最少操作次数. 先判断 a[i] 是否 ...

  3. 【Luogu】P3847调整队形(DP)

    题目链接 DP果真是考思维啊 增加一个数的操作等价于删掉那个不和谐的数的操作. 所以1.2操作可以忽略. 剩下3.4操作,则可以设计f[i][j]是将区间[i,j]变成回文序列需要的操作数. if(a ...

  4. NC207040 丢手绢

    NC207040 丢手绢 题目 题目描述 "丢丢丢手绢,轻轻地放在小朋友的后面,大家不要告诉她,快点快点抓住她,快点快点抓住她." 牛客幼儿园的小朋友们围成了一个圆圈准备玩丢手绢的 ...

  5. 经典DP模型--回文词--IOI2000

    [问题描述]回文词是一种对称的字符串--也就是说, 一个回文词, 从左到右读和从右到左读得到的结果是一样的. 任意给定一个字符串, 通过插入若干字符, 都可以变成一个回文词. 你的任务是写一个程序, ...

  6. RMQ——[USACO Jan07] 均衡队形题解

    题目:[USACO Jan07] 均衡队形 描述: 题目描述 农夫约翰的 N (1 ≤ N ≤ 50,000) 头奶牛,每天挤奶时总会按同样的顺序站好.一日,农夫约翰决定为奶牛们举行一个“终极飞盘”比 ...

  7. 洛谷p1091合唱队形题解

    题目 合唱队形首先要满足的是从1这个位置到中间任意的位置为单增的,从中间任意的位置到最后是单减的,且长度最长.这样才能满足出列的同学最少. 如果要满足这个条件那么我们可以先预处理出每个点的从前找的最长 ...

  8. P1091 合唱队形题解(洛谷,动态规划LIS,单调队列)

    先上题目 P1091 合唱队形(点击打开题目) 题目解读: 1.由T1​<...<Ti​和Ti​>Ti+1​>…>TK​可以看出这题涉及最长上升子序列和最长下降子序列 2 ...

  9. 【题解】合唱队形——LIS坑爹的二分优化

     题目 [题目描述]N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形.合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1 ...

  10. [TJOI2007]书架 题解

    文中给了你一些句子,以及让你任意插入某个位置以及查询某个位置的句子. 发现因为是句子很难搞,所以开个 map 离散一下成数字.然后在额外开一个 map 记录这个数字对应的句子. 然后你要写一种支持插入 ...

随机推荐

  1. 看了同事这10个IDEA神级插件,我也悄悄安装了

    昨天,有读者私信发我一篇文章,说里面提到的 Intellij IDEA 插件真心不错,基本上可以一站式开发了,希望能分享给更多的小伙伴,我在本地装了体验了一下,觉得确实值得推荐,希望小伙伴们有时间也可 ...

  2. 用 VS Code 搞 Qt6:让信号和槽自动建立连接

    Qt 具备让某个对象的信号与符合要求的槽函数自动建立连接.弄起来也很简单,只要调用这个静态方法即可: QMetaObject::connectSlotsByName(...); connectSlot ...

  3. STF的DOCKER搭建

    OPENSTF OpenSTF(Smartphone Test Farm)是一个web端移动设备管理平台,可以从浏览器端远程调试.远程管理设备.其实有点类似于我们现在很火热的云测平台,如:testin ...

  4. Xmake v2.7.3 发布,包组件和 C++ 模块增量构建支持

    Xmake 是一个基于 Lua 的轻量级跨平台构建工具. 它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时. 它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLis ...

  5. vscode代码部署

    前言 在本地环境中开发代码时,经常需要将代码上传到服务器环境中,在环境中构建并调试程序.如果手动使用scp.ftp等文件传输程序将代码上传至环境,一次两次还好,反复多次操作则有些繁琐. 为了方便进行本 ...

  6. UBOOT编译--- include/config/auto.conf、 include/config/auto.conf.cmd、 include/generated/autoconf.h (二)

    1. 前言 UBOOT版本:uboot2018.03,开发板myimx8mmek240. 2. 背景 在编译构建目标时(如 make xxx),顶层 Makefile 的 dot-config 变量值 ...

  7. windows10 设置VS一类的不提供兼容性视图的程序默认管理员启动

    选择兼容性疑难解答: 选择疑难解答程序: 下一步后保存即可.

  8. 关于Module Not Found Error No module named Crypto解决

    前言 之前就遇到这个问题, 当然是windows上具有的问题 问题描述 from Crypto.Cipher import AES 出现 ModuleNotFoundError: No module ...

  9. HashMap为何线程不安全?HashMap,HashTable,ConcurrentHashMap对比

    这两天写爬虫帮组里收集网上数据做训练,需要进一步对收集到的json数据做数据清洗,结果就用到了多线程下的哈希表数据结构,猛地回想起自己看<Java并发编程的艺术>框架篇的时候,在Concu ...

  10. Kubernetes(k8s)存储管理之数据卷volumes(四):持久卷Persistent Volume

    目录 一.系统环境 二.前言 三.持久卷(Persistent Volume) 3.1 持久卷(Persistent Volume)概览 3.2 持久卷和持久卷申领的生命周期 3.3 持久卷的类型 3 ...