都不会做了,以前做过的题目都忘了,唉……递归dp真是耗时啊……
#include <cstdio>
#include <cstring>
#define N 10007
char s[1010];
int dp[1010][1010];
int main()
{
//freopen("in.txt","r",stdin);
int t,k=1;
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
memset(dp,0,sizeof(dp));
int len=strlen(s);
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)
if(s[j]==s[i+j]) dp[j][j+i]=(dp[j][j+i-1]+dp[j+1][j+i]+1)%N;
else dp[j][j+i]=(dp[j+1][j+i]+dp[j][j+i-1]-dp[j+1][j+i-1]+N)%N;
printf("Case %d: %d\n",k++,dp[0][len-1]);
}
return 0;
}