题目链接: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. nginx的location与proxy_pass指令超详细讲解及其有无斜杠( / )结尾的区别

    本文所使用的环境信息如下: windows11 (主机系统) virtual-box-7.0环境下的ubuntu-18.04 nginx-1.22.1 (linux) 斜杠结尾之争 实践中,nginx ...

  2. 图扑物联 | WEB组态可视化软件

    01什么是组态? 组态的概念来自于20世纪70年代中期出现的第一代集散控制系统(Distributed Control System),可理解为"配置"."设置" ...

  3. C++ Qt开发:TabWidget实现多窗体功能

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TabWidg ...

  4. 流媒体服务器ZLMediaKit与FFmpeg

    流媒体服务器ZLMediaKit与FFmpeg overview 关键字:ZLMediaKit.FFmpeg.srt.vlc 如果想快速拥有自己的流媒体服务器,那么可以使用开源项目自己搭建.开源的流媒 ...

  5. 分享两种Pulsar消息积压topic级别策略老化办法

    本文分享自华为云社区<Pulsar消息积压topic级别策略老化的两种方案>,作者: 张俭. Pulsar像大多数消息中间件一样,支持按时间和大小对消息积压进行老化.但是默认的策略只能在n ...

  6. rust 过程宏

    简介 Rust 编程语言里面有两种宏系统,一种是声明宏(Declarative Macros),另一种为过程宏(Procedural Macros).声明宏和过程宏是两种基本上完全不一样的宏系统,编写 ...

  7. MySQL 数据目录

    MySQL 的数据目录 1. MySQL 的主要目录结构 方式1:通过命令搜索 find / -name mysql 方式2(推荐):通过查看配置文件获取目录结构 vim /etc/my.cnf (重 ...

  8. linux rz/sz 拖动文件上传

    不需要第三方上传文件直接 rz上传 拖动.以及 sz下载文件 多舒服 那么 他来了 安装与使用 yum安装 yum -y install lrzsz 使用上传文件,执行命令rz,会跳出文件选择窗口,选 ...

  9. DataX快速入门

    DataX3.0快速入门 一.DataX3.0概览 DataX是阿里云DataWorks数据集成的开源版本,在阿里巴巴集团内部被广泛使用的离线数据同步工具/平台.解决了数据库之中的数据同步.迁移问题, ...

  10. 六一新玩法!AI涂鸦秒变精美艺术画

    摘要:上华为云ModelArts体验AI涂鸦新玩法,赢漫威复仇者联盟乐高!祝大小朋友们六一儿童节快乐~ 本文分享自华为云社区<[云享热点]六一新玩法!AI 涂鸦秒变精美艺术画>,作者:华为 ...