美团A轮 合并回文子串 【dp】
来源:互联网 发布:win10风扇控制软件 编辑:程序博客网 时间:2024/06/07 05:59
合并回文子串时间限制:2秒空间限制:262144K输入两个字符串A和B,合并成一个串C,属于A和B的字符在C中顺序保持不变。如"abc"和"xyz"可以被组合成"axbycz"或"abxcyz"等。我们定义字符串的价值为其最长回文子串的长度(回文串表示从正反两边看完全一致的字符串,如"aba"和"xyyx")。需要求出所有可能的C中价值最大的字符串,输出这个最大价值即可 输入描述:第一行一个整数T(T ≤ 50)。接下来2T行,每两行两个字符串分别代表A,B(|A|,|B| ≤ 50),A,B的字符集为全体小写字母。输出描述:对于每组数据输出一行一个整数表示价值最大的C的价值。输入例子:2aabbaaaaabcaa输出例子:45
考虑a[i...j]和b[k...l]
组成的合并成回文串的情况
如果a[i]==b[l] && a[i+1...j]和b[k...l-1]
能组成回文子串
则a[i...j]和b[k...l]
也能组成回文串
如果a[i]==a[j]&&i<j&&a[i+1...j-1]和b[k...l]
能组成回文串 a[i...j]和b[k...l]
也能组成回文串
如此类推,转移方程懒得写了… ans=max(j-i+1+l-k+1) | a[i..j]和b[k...l]能组成回文串
#include <stdio.h>#include <bits/stdc++.h>#define ll long long#define pii pair<int,int>#define MEM(a,x) memset(a,x,sizeof(a))using namespace std;const int inf=1e9+7;const double EPS=1e-7;const int N = 200+5;char a[100],b[100];bool d[55][55][55][55];int dp(int na,int nb){ int ans=0; for(int i=na;i>=0;--i){ for(int j=i;j<=na;++j){ for(int k=nb;k>=0;--k){ for(int l=k;l<=nb;++l){ bool&res=d[i][j][k][l]; res=0; if( (i==j&&k+1==l)|| (i+1==j&&k==l)|| (i==j&&k==l) ){ res=1; } if(i!=j&&k!=l){ if(a[i]==b[l-1]&&d[i+1][j][k][l-1]){ res=1; } if(a[j-1]==b[k]&&d[i][j-1][k+1][l]){ res=1; } } if(i<j-1&&a[i]==a[j-1]&&d[i+1][j-1][k][l]){ res=1; } if(k<l-1&&b[k]==b[l-1]&&d[i][j][k+1][l-1]){ res=1; } if(res){ ans=max(ans,j-i+l-k); } } } } } return ans;}int slove(){ int na=strlen(a),nb=strlen(b); MEM(d,0); return dp(na,nb);}int main(){ //freopen("/home/lu/code/r.txt","r",stdin); //freopen("/home/lu/code/w.txt","w",stdout); int T; scanf("%d",&T); while(T--){ scanf("%s%s",a,b); printf("%d\n",slove()); } return 0;}
阅读全文
0 0
- 美团A轮 合并回文子串 【dp】
- 牛客网-美团CodeM初赛A轮 合并回文子串 区间DP
- CodeM美团点评编程大赛初赛A轮 B.合并回文子串【区间Dp】
- 美团CodeM 初赛 A伦 合并回文子串 区间dp
- 美团 CodeM 资格赛 Round A 合并回文子串
- 美团codeM预赛A 合并回文子串
- CodeM美团点评编程大赛-合并回文子串-(动态规划)
- 2015编程之美资格赛:回文子序列数 DP
- 回文子串 记忆化搜索(DP)
- [编程之美-07]最长回文子串
- 编程之美回文字符串,DP
- 寻找最长回文子串 Longest Palindrome DP解法
- 最长回文子串 leetcode 05 DP解法
- CodeForces 159D Palindrome pairs (回文子串、dp)
- LeetCode-5-Longest Palindromic Substring 最长回文子串DP
- CodeM美团点评编程大赛 初赛B轮 A 黑白树 贪心 E 子串 暴力
- CodeM美团点评编程大赛初赛B轮 A.黑白树【树型Dp】
- 【简单数学&DP】闰年计数&回文串计数 _Hihocoder战场 @ 编程之美2015资格赛
- [Mac OS/iOS]反汇编工具Hopper分析Crash Log
- PHP面向对象——继承(个人笔记)
- 微服务架构实践之邮件通知系统改造
- Dumpzilla工具第615行bug的解决办法
- C++ 线程
- 美团A轮 合并回文子串 【dp】
- ActiveMQ服务器之间传输对象,项目A发送对象到项目B接收发送对象《二》
- spring mvc 任务定时器 @Scheduled
- CentOS7.0安装配置Storm集群
- 透明度
- 设置UserAgent让电脑浏览器访问微信手机网站
- 程序猿们_一二三四线城市你更愿意选择去哪里工作?
- LeetCode 513. Find Bottom Left Tree Value (C++)
- PAT练习-部分A+B