[牛客每日一题3月26日][NC13230]合并回文子串
时间:2020-03-26
本文章向大家介绍[牛客每日一题3月26日][NC13230]合并回文子串,主要包括[牛客每日一题3月26日][NC13230]合并回文子串使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
根据题目大致分析组成C的回文子串一定是由A中的子串和B中的子串组成的,而复杂度是允许我们枚举子串的。
所以可以想到区间$dp$,$dp[i][ii][j][j]$表示字符串$A[i,ii]$,和字符串$B[j,jj]$能否构成回文串。
如果$A[i]==A[ii]\&\&dp[i-1][ii+1][j][jj]==1$,则$dp[i][ii][j][jj]=1$
如果$B[j]==B[jj]\&\&dp[i][ii][j-1][jj+1]==1$,则$dp[i][ii][j][jj]=1$
如果$A[i]==B[jj]\&\&dp[i-1][ii][j][jj+1]==1$,则$dp[i][ii][j][jj]=1$
如果$B[j]==A[ii]\&\&dp[i][ii+1][j-1][jj]==1$,则$dp[i][ii][j][jj]=1$
对于每个为$1$的状态取最大值即为答案。
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn = 2e5+10; 5 int dp[55][55][55][55]; 6 char a[55],b[55]; 7 int main() { 8 int t; 9 scanf("%d",&t); 10 while(t--) { 11 memset(dp,0,sizeof(dp)); 12 scanf("%s%s",a+1,b+1); 13 int n = strlen(a+1),m =strlen(b+1),ans=0; 14 for(int l1=0; l1<=n; l1++) { 15 for(int l2=0; l2<=m; l2++) { 16 for(int i=1; i+l1-1<=n; i++) { 17 for(int j=1; j+l2-1<=m; j++) { 18 int ii = i+l1-1,jj=j+l2-1; 19 if(l1+l2<=1) 20 dp[i][ii][j][jj]=1; 21 else { 22 if(a[i]==a[ii]) dp[i][ii][j][jj]|=dp[i+1][ii-1][j][jj]; 23 if(b[j]==b[jj]) dp[i][ii][j][jj]|=dp[i][ii][j+1][jj-1]; 24 if(a[i]==b[jj]) dp[i][ii][j][jj]|=dp[i+1][ii][j][jj-1]; 25 if(a[ii]==b[j]) dp[i][ii][j][jj]|=dp[i][ii-1][j+1][jj]; 26 } 27 if(dp[i][ii][j][jj]) 28 ans = max(ans,l1+l2); 29 } 30 } 31 } 32 } 33 printf("%d\n",ans); 34 } 35 }
原文地址:https://www.cnblogs.com/sainsist/p/12574329.html
- Codeforces 810C Do you want a date?(数学,前缀和)
- [快学Python3]数据结构-堆栈
- [快学Python3]PyMySQL库
- [快学Python3]SMTP发送邮件
- Educational Codeforces Round 21 D.Array Division(二分)
- Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2)(A.暴力,B.优先队列,C.dp乱搞)
- [libvirt][nginx]libvirt文档访问速度提高的小技巧
- 图论----同构图(详解)
- 基数排序与桶排序,计数排序【详解】
- SG函数和SG定理【详解】
- 密码学经典之生日悖论与生日攻击【详解】
- POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】
- BZOJ 1192: [HNOI2006]鬼谷子的钱袋(新生必做的水题)
- 快速傅里叶变换(FFT)算法【详解】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 查看JVM参数信息 查看G1堆的使用情况
- LC1263-AI寻路优化: 距离优先bfs -> heuristic + A* -> tarjan + A*
- 从Zookeeper 到 Elastic Job 的原理解析和使用(一)
- 从Zookeeper 到 Elastic Job 的Simple Job使用(二)
- resteasy 接收post请求参数——json and 表单
- 合理配置Mysql缓存,提高缓存命中率
- 浮点数的基本数据类型不能用 == 比较
- centos7 下使用Supervisor监控 gin服务
- Json web token的简单实现 JAVA
- go 指针和内存分配详解
- Git如何解决本地冲突(纯净版)
- No qualifying bean of type 'org.springframework.transaction.PlatformTransactionManager' available:
- typescript中的class和interface
- SSH随笔
- Python爬虫+Flask,带你创建车标学习网站