hdu4632 回文子序列

Posted starve

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu4632 回文子序列相关的知识,希望对你有一定的参考价值。

题: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
",p,dp[0][n-1]);
    }
    return 0;
}
View Code

 

以上是关于hdu4632 回文子序列的主要内容,如果未能解决你的问题,请参考以下文章

HDU 4632 Palindrome subsequence(区间DP求回文子序列数)

hdu4632 Palindrome subsequence 回文子序列个数 区间dp

hdu4632(区间dp)

HDU4632 Palindrome subsequence 题解 区间DP

HDU - tag :: Multi-University 大合集

hdu4632 区间dp