NOIP模拟 回文序列 - DP
题意:
如果一个字符串等于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个字符形成的回文串最大长度。
- 对于偶回文串,下面几种情况可以更新:
- s[a] = s[c]
- t[b] = t[d]
- s[a] = t[d]
- 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的更多相关文章
- [noip模拟]散步<dp>
题目链接:http://begin.lydsy.com/JudgeOnline/problem.php?id=2097 这题A的时候,百感交集五味杂陈............ 就这么一道看起来简单的不 ...
- 【noip模拟赛5】细菌 状压dp
[noip模拟赛5]细菌 描述 近期,农场出现了D(1<=D<=15)种细菌.John要从他的 N(1<=N<=1,000)头奶牛中尽可能多地选些产奶.但是如果选中的奶牛携 ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
- 2018.9.22 NOIP模拟赛
*注意:这套题目应版权方要求,不得公示题面. 从这里开始 Problem A 妹子 Problem B 旅程 Problem C 老大 因为业务水平下滑太严重,去和高一考NOIP模拟,sad... P ...
随机推荐
- menu-普通menu弹出框样式
今天接触到了menu弹出框样式.主要就是在theme下进行调整.现在把接触到的知识点总结一下. 在theme中,跟menu有关的几个属性如下 <item name="panelBack ...
- [转]DOM0,DOM2,DOM3事件处理方式区别
转 DOM0,DOM2,DOM3事件处理方式区别 2016年07月13日 15:00:29 judyge 阅读数:1457更多 个人分类: js与前端 引子: 文档对象模型是一种与编 ...
- Excel数据比对-批量数据比对
1.导出现场的Excel收费规则2.有专门的代码写的测试收费规则的工具(开发自己开发的)3.在这个工具上选择,导出的收费规则Excel,点击导出按钮(导出按钮里面有计算每一列的计费结果4.Excel里 ...
- Eclipse如何从SVN更新和上传修改部分项目
1:右击项目,选择team菜单,点击与资源库同步 2:第一个箭头表示别人改动的部分 3:右击,更新,将同事改动的部分同步到自己的项目里面 4:第二个指向右边的箭头表示自己修改的文件 5:右击,提交,将 ...
- [D3] Build a Line Chart with D3 v4
Line charts are often used to plot temporal data, like a stock price over time. In this lesson we’ll ...
- 从大整数乘法的实现到 Karatsuba 快速算法
Karatsuba 快速乘积算法是具有独特合并过程(combine/merge)的分治算法(Karatsuba 是俄罗斯人).此算法主要是对两个整数进行相乘,并不适用于低位数(如 int 的 32 位 ...
- Ubuntu 14.04安装teamviewer 远程桌面
teamviewer 真是一款非常强大的远程登录软件,可以跨Windows和Ubuntu远程登录,但是在64bit的Ubuntu下安装时,按照官方安装方法总是会遇到问题,下面说一下如何安装: 安装i3 ...
- 【高德地图API】从零開始学高德JS API(五)路线规划——驾车|公交|步行
先来看两个问题:路线规划与导航有什么差别?步行导航与驾车导航有什么差别? 回答: 1.路线规划,指的是为用户提供3条路线推荐.[高德]在提供路线规划的时候,会提供用户自己定义路线规划功能,这是别家没有 ...
- 第二次作业:对Github的初步学习应用(四则运算的自动生成C#实现)
GIT地址 https://github.com/Anzerl?tab=repositories GIT用户名 Anzerl 学号后五位 062426 博客地址 https://www.cnb ...
- 用strace排查故障的5种简单方法(每日一译)
原文链接:5 simple ways to troubleshoot using Strace 我很意外大部分人都不知道如何使用strace.strace一直是我的首选debug工具,因为它非常的有效 ...