首页 > 其他 > 详细

hdu4632 回文子序列

时间:2020-03-06 20:26:30      阅读:49      评论:0      收藏:0      [点我收藏+]

题:http://acm.hdu.edu.cn/showproblem.php?pid=4632

题意:问字符串的有多少个回文子序列(n<=10000)

分析:区间dp,考虑dp[i][j]表示i~j 位置含有多少个回文子序列,转移方程如代码

技术分享图片
#include<bits/stdc++.h>
using namespace std;
const int M=1e3+3;
const int mod=10007;
int dp[M][M];
char s[M];
int main(){
    int t;
    scanf("%d",&t);
    for(int p=1;p<=t;p++){
        scanf("%s",s);
        int n=strlen(s);
        memset(dp,0,sizeof(dp));
        for(int i=0;i<n;i++)
            dp[i][i]=1;
        for(int i=0;i<n;i++)
            for(int j=i-1;j>=0;j--){
                dp[j][i]=(dp[j+1][i]+dp[j][i-1]-dp[j+1][i-1]+mod)%mod;
                if(s[i]==s[j])
                    dp[j][i]+=dp[j+1][i-1]+1;
                dp[j][i]%=mod;
            }
        printf("Case %d: %d\n",p,dp[0][n-1]);
    }
    return 0;
}
View Code

 

hdu4632 回文子序列

原文:https://www.cnblogs.com/starve/p/12430195.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!