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 ...
随机推荐
- Objc执行时读取和写入plist文件遇到的问题
以下是本猫保持游戏NPC和物件交互的plist文件: 随着游戏和玩家逐步发生互动,玩家会改动人物和物件的交互的状态.这也是RPG游戏最主要的功能. 在切换每一个地图时须要将上一个地图发生的改变存储到p ...
- 不是IT圈人的IT创业优劣势!
不是IT圈人的IT创业优势: 1)更尊重市场导向而非技术 2)更关注产品细节而非技术 3)更关注企业平衡而非技术 不是IT圈人的IT创业劣势: 1)因营销而放弃技术规划 2)因需求而丧失技术 ...
- ImportError: No module named tornado.ioloop 记录过程
ImportError: No module named tornado.ioloop 记录过程 安装 pycurl pip install pycurl 报错 'curl-config' no ...
- 为什么选择Solr?
在大型的SQL数据库上很难执行高速的查询有Solr是Apache 下的一个开源项目,使用Java基于Lucene开发的全文检索服务: 它是一个独立的企业级搜索应用服务器,它对外提供类似于Web-ser ...
- arguments对象、apply()、匿名函数
在学习arguments对象时,碰到的一段code,不是太好理解.原文地址中文(http://www.jb51.net/article/25048.htm).英文(http://www.sitepoi ...
- 【例题 7-6 UVA - 140】Bandwidth
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 暴力做就好. O(8!*26^2) [代码] /* 1.Shoud it use long long ? 2.Have you ev ...
- 【例题 6-12 UVA - 572 】Oil Deposits
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] dfs.. [代码] #include <bits/stdc++.h> using namespace std; con ...
- 【UVA】434-Matty's Blocks
一道非常easy想复杂的题,给出主视图和右视图,计算最少能用几个正方体组成相应的视图,以及最多还能加几块正方体. 求最多加入事实上就是求出最多的正方体数减去最少的,主要就是最少的不好求. 一開始各种模 ...
- UVA 11859 - Division Game
看题传送门 题目大意 有一个n * m的矩阵,每个元素均为2~10000之间的正整数,两个游戏者轮流操作.每次可选一行中的1个或者多个大于1的整数把它们中的每个数都变成它的某个真因子,比如12可以变成 ...
- FPGA实现UHS的一些资料
对使用FPGA和SD卡进行UHS模式通信的评估: 论文:基于FPGA的SD UHS-II卡控制器设计与实现 设计IP:SD UHS-II Host Controller 供应商: System Lev ...