今天(2019/10/13)考的题目,用学长写的能让人崩溃的LCS改编的
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int mod=100000000; const int maxn=5005; char a[maxn], b[maxn]; int f[2][maxn],g[2][maxn]; int main() { scanf("%s",a+1); scanf("%s",b+1); int n=strlen(a+1)-1, m=strlen(b+1)-1; g[1][0]=1; for(int j=0;j<=m;j++) _____1_____; for(int i=1;i<=n;i++) { int now=i&1,pre=now^1; for(int j=1; j<=m; j++) { f[now][j]=_____2_____; if(a[i]==b[j]) { f[now][j]=_____3_____; if(f[now][j]==f[pre][j-1]+1) g[now][j]=g[pre][j-1]; } else { g[now][j]=0; if(f[now][j]==f[pre][j-1]) g[now][j]-=g[pre][j-1]; } if(f[now][j]==f[pre][j]) g[now][j]=_____4_____; if(f[now][j]==f[now][j-1]) g[now][j]=_____5_____; } } printf("%d\n%d",f[n&1][m],g[n&1][m]); return 0; }
1.1上述程序___1___中应该填写() A.g[0][j]=0 B.g[j][0]=0 C.g[0][j]=1 D.g[j][0]=1 1.2 上述程序___2___中应该填写() A.min(f[pre][j-1],f[now][j-1]) B.max(f[pre][j] f[now][j]) C.max(f[pre][j],f[now][j-1]) D.max(f[now][j],f[pre][j-1]) 1.3 上述程序___3___中应该填写() A.min(f[pre][j-1],f[now][j-1]+1) B.max(f[pre][j],f[now][j]+1) C.max(f[pre][j],f[now][j-1]+1) D.max(f[now][j],f[pre][j-1]+1) 1.4 上述程序___4___中应该填写() A.(g[now][j]+g[pre][j-1])%mod B.(g[now][j-1]+g[pre][j])%mod C.(g[now][j]+g[pre][j])%mod D.(g[now][j-1]+g[pre][j-1])%mod 1.5 上述程序___5___中应该填写() A.(g[now][j]+g[pre][j-1])%mod B.(g[now][j-1]+g[pre][j])%mod C.(g[now][j]+g[pre][j])%mod D.(g[now][j-1]+g[pre][j-1])%mod