Palindrome subsequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65535 K (Java/Others)
Total Submission(s): 3068 Accepted Submission(s): 1262
Problem Description
In mathematics, a subsequence is a sequence that can be derived from another sequence by deleting some elements without changing the order of the remaining elements. For example, the sequence
#include "cstring"
#include "cstdio"
#include "iostream"
#include "string.h"
#define MOD 10007
using namespace std;
int main()
{
int cas;
scanf("%d",&cas);
int cnt=0;
while(cas--)
{
char s[1005];
int dp[1005][1005];
memset(dp,0,sizeof(dp));
scanf("%s",s);
for(int i=0;i<strlen(s);i++)
dp[i][i]=1;
for(int i=0;i<strlen(s);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]+dp[j][i]+1+MOD)%MOD;
}
}
printf("Case %d: %d\n",++cnt,dp[0][strlen(s)-1]);
}
}