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; }
以上是关于hdu4632 回文子序列的主要内容,如果未能解决你的问题,请参考以下文章
HDU 4632 Palindrome subsequence(区间DP求回文子序列数)
hdu4632 Palindrome subsequence 回文子序列个数 区间dp
HDU4632 Palindrome subsequence 题解 区间DP