您的位置:首页 > 其它

hdu 4632 回文子序列计数

2013-10-09 20:44 246 查看
水题

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<vector>
#define mod 10007
using namespace std;
char str[1002]; int dp[1002][1002],cas;
void work( )
{
int len = strlen( str );
memset( dp,0,sizeof(dp) );
for( int i = 0; i < len; i++ )dp[i][i] = 1;
for( int i = 1; i < len; i++ )
for( int j = 0; j + i < len; j++ )
{
int t = i+j;
dp[j][t] =  dp[j][t-1] + dp[j+1][t]; if( j+1 <= t-1 ) dp[j][t] -= dp[j+1][t-1];
if( str[j] == str[t] )
{
if(  j+1 <= t-1 ) dp[j][t] +=  dp[j+1][t-1] + 1;
else  dp[j][t]++;
}
dp[j][t] %=  mod; dp[j][t] += mod;
}
dp[0][len-1] %= mod;
printf("Case %d: %d\n",cas++,dp[0][len-1]);
}
int main( )
{
int T; cas = 1;scanf("%d",&T);
while( T-- ){
scanf("%s",&str);work( );
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: