如果发现广告等破坏行为,请尽量将条目恢复到较早的版本而不是把相应内容直接删除,谢谢合作。
URAL/1577
来自"NOCOW"
< URAL
简单DP不解释了,我犯2,手一歪,把mod的数打成了10^9+9。。。结果wa了好久。
#include <cstdio> #include <cstring> const int maxn=2002,p=1000000007; char s1[maxn],s2[maxn]; int n,m,f[maxn][maxn],g[maxn][maxn]; void updata(int i,int j,int x,int y) { if (f[x][y]+1 < f[i][j]) { f[i][j]=f[x][y]+1; g[i][j]=g[x][y]; } else if (f[x][y]+1 == f[i][j]) g[i][j]=(g[i][j]+g[x][y])%p; } int main() { int i,j; scanf("%s%s",s1+1,s2+1); n=strlen(s1+1); m=strlen(s2+1); memset(g,0,sizeof(g)); for (i=1;i<=n;++i) for (j=1;j<=m;++j) f[i][j]=n+m; for (i=0;i<=n;++i) f[i][0]=i; for (i=0;i<=m;++i) f[0][i]=i; for (i=0;i<=n;++i) g[i][0]=1; for (i=0;i<=m;++i) g[0][i]=1; for (i=1;i<=n;++i) for (j=1;j<=m;++j) if (s1[i] == s2[j]) updata(i,j,i-1,j-1); else { updata(i,j,i-1,j); updata(i,j,i,j-1); } printf("%d\n",g[n][m]); return 0; } //by zzy