题目链接

区间 DP 的经典模型之一。

题意是将整个串通过四种操作变成一个回文串,根据套路,不难设计出 dp[i][j] 表示为使区间 [i, j] 成为回文串的最少操作次数。

先判断 a[i] 是否等于 a[j],如果相等,那么:

f[i][j] = max(f[i][j], f[i + 1][j - 1])

如果不相等,则改变一个:

f[i][j] = max(f[i][j], f[i + 1][j - 1] + 1)

其实可以发现第一、二种操作都和第三种等价,这三种转移可以表示为:

f[i][j] = max(f[i][j - 1], f[i + 1][j]) + 1

对于区间 DP,已经得到答案的区间我们都可以直接认为它是已满足题意要求的性质的,因为所记录的答案就是使其成立的最小代价。

然后设计方程乱搞,对于该模型就是考虑让区间两端点满足性质的问题……

 #include <queue>
#include <cstdio>
#include <cctype>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int maxn = + ;
int n, a[maxn], dp[maxn][maxn]; int main(int argc, char const *argv[])
{
freopen("nanjolno.in", "r", stdin);
freopen("nanjolno.out", "w", stdout); scanf("%d", &n);
for(int i = ; i <= n; ++i) scanf("%d", &a[i]);
for(int i = ; i <= n; ++i) {
for(int l = ; l + i - <= n; ++l) {
int r = l + i - ;
if( a[l] == a[r] ) dp[l][r] = dp[l + ][r - ];
else dp[l][r] = min(dp[l + ][r - ], min(dp[l][r - ], dp[l + ][r])) + ;
}
}
printf("%d\n", dp[][n]); fclose(stdin), fclose(stdout);
return ;
}

 —— 与漫长的人生相比,两人共处的时间仅一瞬间;

    即使这些只是昙花一现的回忆,那时的我却以此为信仰。
有道词典

f[i][j] = max(f ...

详细X

f[i][j] = max(f[i][j], f[i + 1][j - 1])

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

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

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

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

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

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

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

  4. NC207040 丢手绢

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

  5. 伪造队形(FFT)

    题目描述Tukkun带着他的合唱队去环形音乐厅参加演出.上场前,Tukkun发现了严重的问题:音乐厅的工作人员把他们的合唱队形搞错了.具体来说,Tukkun的合唱队有N个人围成一圈,身高按照顺时针顺序 ...

  6. .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入

    上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全:另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿.理想的方式是,w ...

  7. .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整-控制反转和依赖注入的使用

    再次调整项目架构是因为和群友dezhou的一次聊天,我原来的想法是项目尽量做简单点别搞太复杂了,仅使用了DbContext的注入,其他的也没有写接口耦合度很高.和dezhou聊过之后我仔细考虑了一下, ...

  8. C#中如何调整图像大小

    在本篇文章中,我将介绍如何在C#中来调整你想要的图像大小.要实现这一目标,我们可以采取以下几个步骤: 1.首先要获取你想要调整大小的图像: string path = Server.MapPath(& ...

  9. BPM配置故事之案例9-根据表单数据调整审批线路2

    老李:好久不见啊,小明. 小明:-- 老李:不少部门有物资着急使用,现在的审批流程太慢了,申请时增加一个是否加急的选项吧.如果选加急,金额1000以下的直接到我这里,我审批完就通过,超过1000的直接 ...

随机推荐

  1. serversql数据库的查询操作

    sql数据库 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !importan ...

  2. Swift代理的使用

    Swift代理的使用 协议规定了用来实现某一特定功能所必需的方法和属性. 任意能够满足协议要求的类型被称为遵循(conform)这个协议. 类,结构体或枚举类型都可以遵循协议,并提供具体实现来完成协议 ...

  3. nginx主配置文件详解

    #定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数.worker_processes 8; #全局错误日志定义类型,[ debug | in ...

  4. #019 还未搞明白的C语言问题

    吐槽一下作业系统 自己电脑上跑的好好地到他这里就给我算错了.... 是我的问题还是系统的问题?????摸不着头脑 总分 12 从键盘任意输入某班30个学生的成绩(成绩类型为整型),保存到数组中,并输出 ...

  5. 修改 TeamViewer ID 的方法

    TeamViewer 使用频繁后会被判定为商业用途,不可用.此软件的账号和设备mac地址绑定. 修改TeamViewer ID后可以重新开始使用.下述方法可以成功修改TeamViewer ID. 关闭 ...

  6. Java开发学习心得(一):SSM环境搭建

    目录 Java开发学习心得(一):SSM环境搭建 1 SSM框架 1.1 Spring Framework 1.2 Spring MVC Java开发学习心得(一):SSM环境搭建 有一点.NET的开 ...

  7. Putty中的pscp和psftp的简明用法

    用习惯了putty,那是真心的方便啊,putty文件夹下其他的小兄弟也不能忽略啊. 以前的时候,从远程服务器下载个文件用winscp,后来,发现在putty文件夹里好像有一个 pscp和psftp,今 ...

  8. AI GMM

    GMM(Gaussian Mixture Model,高斯混合模型)通常用于聚类(也用于密度估计),数据是由k个高斯分布生成,每个分布表示一个类. 期望最大(Expectation Maximizat ...

  9. Java的get、post请求

    URLConnection package com.shuzf.http; import java.io.BufferedReader; import java.io.IOException; imp ...

  10. 字符串匹配KMP算法详解

    1. 引言 以前看过很多次KMP算法,一直觉得很有用,但都没有搞明白,一方面是网上很少有比较详细的通俗易懂的讲解,另一方面也怪自己没有沉下心来研究.最近在leetcode上又遇见字符串匹配的题目,以此 ...