恶臭LCS

今天(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

 

1.1 B

1.2 A

1.3 B

1.4 B

1.5 B

posted @ 2019-10-13 14:09  Corylus  阅读(131)  评论(0编辑  收藏  举报