恶臭LCS

Posted hazel-wu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了恶臭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
%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

以上是关于恶臭LCS的主要内容,如果未能解决你的问题,请参考以下文章

动态规划解最长公共子序列(LCS)问题 (附可打印LCS完整代码)

最长公共子序列(LCS),求LCS长度和打印输出LCS

LCS的数量

经典问题LCS(最大公共子串问题)C代码实现

LCS问题

Aizu2090LCS