lightoj 1013

来源:互联网 发布:qq群关系数据库 编辑:程序博客网 时间:2024/06/06 02:03


/********************* * Author:fisty * Data:2014-10-11 * lightoj 1013 * DP + LCS * ******************/#include <cstdio>#include <cstring>#define max(a,b) ((a)>(b)?(a):(b))const int N=32;int dp[2][N];  /* 存储LCS长度 */__int64 f[2*N][N][N];char str[N],ch[N];int LCS (int lenstr,int lench){//返回LCS的长度memset(dp,0,sizeof(dp));int k;for (int i=1;i<=lenstr;i++){k=i&1;for (int j=1;j<=lench;j++)  if (str[i-1] == ch[j-1])  dp[k][j]=dp[k^1][j-1]+1;  elsedp[k][j]=max(dp[k][j-1],dp[k^1][j]);}return dp[k][lench];}int main (){#ifdef ONLINE_JUDGE#elsefreopen("read.txt","r",stdin);#endifint T;scanf("%d",&T);for (int Cas=1;Cas<=T;Cas++){scanf("%s%s",str,ch);int lenstr=strlen(str);int lench=strlen(ch);int lenlcs=LCS(lenstr,lench);int ans=lenstr+lench-lenlcs;memset(f,0,sizeof(f));f[0][0][0]=1;for (int i=0;i<=ans;i++) for (int j=0;j<=lenstr;j++)for (int k=0;k<=lench;k++) if (f[i][j][k])if (str[j]!=ch[k]){f[i+1][j+1][k]+=f[i][j][k];f[i+1][j][k+1]+=f[i][j][k];}elsef[i+1][j+1][k+1]+=f[i][j][k];printf("Case %d: %d %lld\n",Cas,ans,f[ans][lenstr][lench]);}return 0;}


0 0
原创粉丝点击