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 ...
随机推荐
- PatentTips - Apparatus and method for a generic, extensible and efficient data manager for virtual peripheral component interconnect devices (VPCIDs)
BACKGROUND A single physical platform may be segregated into a plurality of virtual networks. Here, ...
- Javascript和jquery事件--滚动条事件和自定义滚动条事件样式
很想把滚动条事件跟鼠标滚轮事件放在一起,那就直接写在这一篇了.除了事件以外,对滚动条样式的调整也记在这里吧. 滚动条是浏览器的默认事件,使用overflow:auto/scroll都有可能出现,它的默 ...
- 扩展的方法:es6 安装模块builder
https://github.com/es-shims/es5-shim/ Image.png 检测浏览器可支持es5,不支持就扩展,做兼容: 扩展的方法: Image.png 取所有对象的键值: o ...
- 适用android的MVP:怎样组织展示层
原文 MVP for Android:How to organize presentation layer http://antonioleiva.com/mvp-android/ 译文 MVP(Mo ...
- git 配置用户名email地址,设置密码
- 关于C语言的书
我想横着走,,哈哈哈哈
- REGEXP_LIKE,REGEXP_INSTR,REGEXP_SUBSTR,REGEXP_REPLACE
参考: http://www.cnblogs.com/scottckt/archive/2012/10/11/2719562.html http://www.jb51.net/article/3842 ...
- LA 3602 - DNA Consensus String 枚举
原题地址:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- jQuery常用方法(持续更新) jQuery(转)
0.常用代码: 请容许我在1之前插入一个0,我觉得我有必要把最常用的代码放在第一位,毕竟大部分时间大家都是找代码的. (1)AJAX请求 $(function() { $('#send').click ...
- 2.CCGridAction(3D效果),3D反转特效,凸透镜特效,液体特效,3D翻页特效,水波纹特效,3D晃动的特效,扭曲旋转特效,波动特效,3D波动特效
1 类图组织 2 实例 CCSprite * spr = CCSprite::create("HelloWorld.png"); spr->setPosition(cc ...