• [牛客每日一题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
    ",ans);
    34     }
    35 }

  • 相关阅读:
    什么是架构
    intellij idea新建maven项目,一直loading archetype list.....
    maven使用出现的错误
    mock使用中出现的错误
    9个最好用的在线编译/调试工具
    Junit测试中找不到junit.framework.testcase
    mysql图形化界面MySQL_Workbench
    win7下mysql免安装版使用
    qemu安装
    逻辑卷管理
  • 原文地址:https://www.cnblogs.com/sainsist/p/12574329.html
Copyright © 2020-2023  润新知