题目链接:Here

遇到这种数据范围较小的计数问题应该优先考虑dp,本题就是如此。

那么应该怎么样考虑转移呢?

首先最后C中的那个价值最大的子串一定是由字符串A的一个区间和字符串B的一个区间合并得到的,

那么现在假设 A[i] ~ A[j]B[k] ~ B[l] 构成了一个回文串(这里设 dp[i][j][k][l])

则他能转移到的区间有

1:\(a[i-1]==a[j+1] 时\ dp[i-1][j+1][k][l]\)

2:\(a[i-1]==b[l+1]时\ dp[i-1][j][k][l+1]\)

3:\(b[k-1]==a[j+1]时\ dp[i][j+1][k-1][l]\)

4:\(b[k-1]==b[l+1]时\ dp[i][j][k-1][l+1]\)

那么对于的转移方程也就是:

if (a[i] == a[j]) dp[i][j][k][l] |= dp[i + 1][j - 1][k][l];
if (b[k] == b[l]) dp[i][j][k][l] |= dp[i][j][k + 1][l - 1];
if (a[i] == b[l]) dp[i][j][k][l] |= dp[i + 1][j][k][l - 1];
if (a[j] == b[k]) dp[i][j][k][l] |= dp[i][j - 1][k + 1][l];

然后就可以轻松的区间转移啦~~~~~

oh,在注意一下枚举过程中只有一个字母的状态一定是回文的就可以啦

AC 代码

// Murabito-B 21/04/06
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int dp[60][60][60][60];
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
int _;
for (cin >> _; _--;) {
string a, b;
cin >> a >> b;
a = "@" + a, b = "@" + b;
int lena = a.size(), lenb = b.size();
int ans = 0;
for (int l1 = 0; l1 <= lena; ++l1)
for (int l2 = 0; l2 <= lenb; ++l2)
for (int i = 1; i <= lena - l1; ++i)
for (int k = 1; k <= lenb - l2; ++k) {
int j = i + l1 - 1, l = k + l2 - 1;
// 说明此时仅一个点
if (l1 + l2 <= 1) dp[i][j][k][l] = 1;
else {
dp[i][j][k][l] = 0;
if (a[i] == a[j]) dp[i][j][k][l] |= dp[i + 1][j - 1][k][l];
if (b[k] == b[l]) dp[i][j][k][l] |= dp[i][j][k + 1][l - 1]; if (a[i] == b[l]) dp[i][j][k][l] |= dp[i + 1][j][k][l - 1];
if (a[j] == b[k]) dp[i][j][k][l] |= dp[i][j - 1][k + 1][l];
}
if (dp[i][j][k][l]) ans = max(ans, l1 + l2);
}
cout << ans << "\n";
}
return 0;
}

【每日一题】2.合并回文子串 (字符串处理 + 区间DP)的更多相关文章

  1. 合并回文子串(区间dp)

    链接:https://ac.nowcoder.com/acm/problem/13230来源:牛客网 题目描述 输入两个字符串A和B,合并成一个串C,属于A和B的字符在C中顺序保持不变.如" ...

  2. nowcoder 合并回文子串

    链接:https://www.nowcoder.com/acm/contest/6/C来源:牛客网题目输入两个字符串A和B,合并成一个串C,属于A和B的字符在C中顺序保持不变.如"abc&q ...

  3. 最长回文子串(Longest Palindromic Substring)-DP问题

    问题描述: 给定一个字符串S,找出它的最大的回文子串,你可以假设字符串的最大长度是1000,而且存在唯一的最长回文子串 . 思路分析: 动态规划的思路:dp[i][j] 表示的是 从i 到 j 的字串 ...

  4. 美团2017年CodeM大赛-初赛A轮 C合并回文子串

    区间dp一直写的是递归版本的, 竟然超时了, 学了一下非递归的写法. #include <iostream> #include <sstream> #include <a ...

  5. 求最长回文子串 - leetcode 5. Longest Palindromic Substring

    写在前面:忍不住吐槽几句今天上海的天气,次奥,鞋子里都能养鱼了...裤子也全湿了,衣服也全湿了,关键是这天气还打空调,只能瑟瑟发抖祈祷不要感冒了.... 前后切了一百零几道leetcode的题(sol ...

  6. leetcode-5 最长回文子串(动态规划)

    题目要求: * 给定字符串,求解最长回文子串 * 字符串最长为1000 * 存在独一无二的最长回文字符串 求解思路: * 回文字符串的子串也是回文,比如P[i,j](表示以i开始以j结束的子串)是回文 ...

  7. 【LeetCode每日一题 Day 5】5. 最长回文子串

    大家好,我是编程熊,今天是LeetCode每日一题的第五天,一起学习LeetCode第五题<最长回文子串>. 题意 给你一个字符串 s,找到 s 中最长的回文子串. 示例 输入:s = & ...

  8. 【每日一题】【奇偶分别中心扩展/动态规划】2022年2月5日-NC最长回文子串的长度

    描述对于长度为n的一个字符串A(仅包含数字,大小写英文字母),请设计一个高效算法,计算其中最长回文子串的长度. 方法1:奇数偶数分别从中心扩展 import java.util.*; public c ...

  9. 后缀数组 - 求最长回文子串 + 模板题 --- ural 1297

    1297. Palindrome Time Limit: 1.0 secondMemory Limit: 16 MB The “U.S. Robots” HQ has just received a ...

  10. 每日一道 LeetCode (48):最长回文子串

    每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...

随机推荐

  1. Go切片是值传递还是引用传递?

    Go没有引用传递和引用类型!!! 很多人有个误区,认为涉及Go切片的参数是引用传递,或者经常听到Go切片是引用类型这种说法,今天我们就来说一下方面的问题. 什么是值传递? 将实参的值传递给形参,形参是 ...

  2. 记一次 .NET 某药厂业务系统 CPU爆高分析

    一:背景 1. 讲故事 前段时间有位朋友找到我,说他们的程序出现了CPU爆高,让我帮忙看下怎么回事?这种问题好的办法就是抓个dump丢给我,推荐的工具就是用 procdump 自动化抓捕. 二:Win ...

  3. Android对接微信登录记录

    Android对接微信登录记录 - Stars-One的杂货小窝 Android项目要对接下微信登录,稍微记录下踩坑点 代码 1.添加依赖 implementation 'com.tencent.mm ...

  4. Pulsar3.0 升级指北

    Pulsar3.0 介绍 Pulsar3.0 是 Pulsar 社区推出的第一个 LTS 长期支持版本. 如图所示,LTS 版本会最长支持到 36 个月,而 Feature 版本最多只有六个月:类似于 ...

  5. Log4j2 漏洞复现GetShell

    目录: 一.搭建环境 1. 首先拉一个docker镜像 2. 然后启动环境 二.获取shell 首先,试验一下DNSLog 1. 准备JNDI注入工具 下载 进入目录打包成jar包 2. 利用 生成p ...

  6. C#有望成为2023年的编程语言之王

    前言 TIOBE 2023年12月编程语言指数头条新闻:C#有望成为2023年的编程语言之王. TIOBE是什么? 访问地址:https://www.tiobe.com/tiobe-index/ TI ...

  7. 神经网络基础篇:关于 python_numpy 向量的说明(A note on python or numpy vectors)

    关于 python_numpy 向量的说明 主要讲Python中的numpy一维数组的特性,以及与行向量或列向量的区别.并说一下在实际应用中的一些小技巧,去避免在coding中由于这些特性而导致的bu ...

  8. 4种Python中基于字段的不使用元类的ORM实现方法

    本文分享自华为云社区<Python中基于字段的不使用元类的ORM实现>,作者: 柠檬味拥抱 . 不使用元类的简单ORM实现 在 Python 中,ORM(Object-Relational ...

  9. GaussDB(DWS)条件表达式函数返回错误结果集排查

    摘要:条件表达式函数中出现结果集不一致问题,我们首先要考虑是否入参数据类型不一致导致出参不一致. 本文分享自华为云社区<GaussDB(DWS)条件表达式函数返回错误结果集排查>,作者:y ...

  10. 大数据处理黑科技:揭秘PB级数仓GaussDB(DWS) 并行计算技术

    摘要:通过这篇文章,我们了解了GaussDB(DWS)并行计算技术的原理以及调优策略.希望广大开发者朋友们能够在实践中尝试该技术,更好地进行性能优化. 随着硬件系统的越来越好,数据库运行的CPU.磁盘 ...