dp[i][j]为a中的第i个与z中的d[j]各项匹配的结果
没有写大数加法,后补上.
#include <stdio.h>
#include <string.h>
int dp[10001][101]={0};
int slove(char x[],char z[]){
int m=strlen(z);
int n=strlen(x);
int count=0;
int i,j,k;
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(j==0){
dp[i][j]=x[i]==z[j];
}else{
if(x[i]==z[j]){
int k;
for(k=0;k<i;k++){
dp[i][j]+=dp[k][j-1];
}
}
}
count+=dp[i][j]*(j==m-1);
}
}
printf("%d\n",count);
return 0;
}
int main(){
int n;
char x[10001],z[101];
scanf("%d",&n);
while(n){
scanf("%s%s",x,z);
slove(x,z);
n--;
}
return 0;
}