1 条题解
-
1
#include<bits/stdc++.h> using namespace std; int read() { char s; int k=0,base=1; while((s=getchar())!='-'&&s!=EOF&&!(s>='0'&&s<='9')); if(s==EOF)exit(0); if(s=='-')base=-1,s=getchar(); while(s>='0'&&s<='9') { k=k*10+(s-'0'); s=getchar(); } return k*base; } void write(int x) { if(x<0) { putchar('-'); write(-x); } else { if(x/10)write(x/10); putchar(x%10+'0'); } } int n,m; char a[510],b[510]; int f[5][510][510],t;//滚动数组 inline void add(int A,int &B) { B+=A; if (B>1024523) B-=1024523;//取膜 } int cur=0; int main() { n=read();m=read(); scanf("%s",a+1); scanf("%s",b+1); f[0][0][0]=1; for (int i=0;i<=n;i++,cur^=1) for (int j=0;j<=m;j++) for (int k=0;k<=n;k++) { t=f[cur][j][k]; if (i+j-k>m||i+j-k<0) continue;//越界退出 if (a[i+1]==a[k+1]) add(t,f[cur^1][j][k+1]);//状态转移 if (b[j+1]==b[i+j-k+1]) add(t,f[cur][j+1][k]); if (a[i+1]==b[i+j-k+1]) add(t,f[cur^1][j][k]); if (b[j+1]==a[k+1]) add(t,f[cur][j+1][k+1]); f[cur][j][k]=0;//清掉 } printf("%d",f[cur][m][n]); return 0; }
- 1
信息
- ID
- 1566
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 15
- 已通过
- 6
- 上传者