题意:

如果一个字符串等于s和t的长度之和(\(l \le 50\)),并且可以拆成两个字符串子序列,分别与s和t相同,那么它就是s和t的一个并字符串(从字符串中选出若干个可以不连续的字符按照原序列写出来形成的新字符串)。定义趣味串为s和t的并字符串的任意一个回文子串,求所有趣味串的长度最大值。

分析:

首先暴力方法就是dfs + manacher枚举所有并字符串。

正解:因为l小于等于50,所以可以使用\(n^4\)的算法:设dp[a][b][c][d]表示取出S的前a个字符、T的前b个字符、S的后c个字符、T的后d个字符形成的回文串最大长度。

  • 对于偶回文串,下面几种情况可以更新:
  1. s[a] = s[c]
  2. t[b] = t[d]
  3. s[a] = t[d]
  4. s[c] = t[b]
  • 对于奇回文串:当且仅当某一个串已经取完,且另一个串剩下最后一个时,将剩下的这个插入,就可以形成奇回文串。

code

#include<bits/stdc++.h>
using namespace std;
const int N = 55;
int dp[N][N][N][N];
int lenS, lenT, ans = 0;
char s[N], t[N]; int main(){
// freopen("h.in", "r", stdin);
scanf("%s", s + 1), scanf("%s", t + 1);
lenS = strlen(s + 1), lenT = strlen(t + 1);
for(int a = 1; a <= lenS + 1; a++)
for(int b = 1; b <= lenT + 1; b++)
for(int c = lenS + 1; c >= 1; c--)
for(int d = lenT + 1; d >= 1; d--){
int e = dp[a][b][c][d];
if(a < c && s[a] == s[c] && e + 2 > dp[a + 1][b][c - 1][d])
dp[a + 1][b][c - 1][d] = e + 2;
if(b < d && t[b] == t[d] && e + 2 > dp[a][b + 1][c][d - 1])
dp[a][b + 1][c][d - 1] = e + 2;
if(a <= c && b <= d){
if(s[a] == t[d] && e + 2 > dp[a + 1][b][c][d - 1])
dp[a + 1][b][c][d - 1] = e + 2;
if(s[c] == t[b] && e + 2 > dp[a][b + 1][c - 1][d])
dp[a][b + 1][c - 1][d] = e + 2;
}
}
for(int a = 1; a <= lenS + 1; a++)
for(int b = 1; b <= lenT + 1; b++)
for(int c = lenS + 1; c >= 0; c--)
for(int d = lenT + 1; d >= 0; d--){
int e = dp[a][b][c][d];
if(a == c && b > d) ans = max(ans, e + 1);
if(a > c && b == d) ans = max(ans, e + 1);
if(a > c && b > d) ans = max(ans, e);
}
cout<<ans;
return 0;
}

NOIP模拟 回文序列 - DP的更多相关文章

  1. [noip模拟]散步<dp>

    题目链接:http://begin.lydsy.com/JudgeOnline/problem.php?id=2097 这题A的时候,百感交集五味杂陈............ 就这么一道看起来简单的不 ...

  2. 【noip模拟赛5】细菌 状压dp

    [noip模拟赛5]细菌   描述 近期,农场出现了D(1<=D<=15)种细菌.John要从他的 N(1<=N<=1,000)头奶牛中尽可能多地选些产奶.但是如果选中的奶牛携 ...

  3. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  4. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  5. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  6. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  7. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  8. CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

    A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...

  9. 2018.9.22 NOIP模拟赛

    *注意:这套题目应版权方要求,不得公示题面. 从这里开始 Problem A 妹子 Problem B 旅程 Problem C 老大 因为业务水平下滑太严重,去和高一考NOIP模拟,sad... P ...

随机推荐

  1. [Vue + TS] Using Route events inside Vue

    vue-router introduces new hooks into the component. In this lesson we’ll show you how to use these n ...

  2. Ubuntu配置sublime text 3的c编译环境

    新建编译系统 c语言 选择tool –> Build System –> New Build System 然后输入下面代码 { "shell_cmd": " ...

  3. ED/EP系列1《简单介绍》

    电子存折(ED:ElectronicDeposit)一种为持卡人进行消费.取现等交易而设计的支持个人识别码(PIN)保护的金融IC卡应用. 它支持圈存.圈提.消费和取现等交易. 电子钱包(EP:Ele ...

  4. HDU 1848(sg博弈) Fibonacci again and again

    Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

  5. Android中Alarm的机制

    本次给大家分析的是Android中Alarm的机制所用源码为最新的Android4.4.4.首先简单介绍如何使用Alarm并给出其工作原理,接着分析Alarm和Timer以及Handler在完成定时任 ...

  6. 2.Spring Boot 入门

    转自:https://blog.csdn.net/catoop/article/details/50501664

  7. vue-cli打包项目后,可以修改配置文件

    问题: 前端需要修改后台服务器地址url,写好的配置文件会在npm run build 后压缩在一起,传到运行的前端服务器上后,需要到前端打包的源码,找到url地址进行修改.如果不在打包的源码修改,则 ...

  8. jmeter连接mysql数据库配置

    用jmeter连接mysql数据库,在配置的过程中遇到了几个坑,跟大家分享一下,避免人人踩坑~~ 关于驱动包:大部分时候是需要下载与服务器的mysql相同版本的jar包~~ 关于驱动包路径:不是所有的 ...

  9. Centos7安装.Net Core 2.2环境以及部署.Net Core MVC程序(Apache+Jexus环境)

    原文:Centos7安装.Net Core 2.2环境以及部署.Net Core MVC程序(Apache+Jexus环境) 1.双11抢购***VPS.配置如下: CPU:2 核 内存:2048 M ...

  10. eclipse中的乱码问题

    在新建项目或导入工程时常常遇到的问题: 1.导入工程后,Java文件中文乱码 项目右键--Properties--Resource(快捷键Alt+Enter),在Text file encoding中 ...