您的位置:首页 > 产品设计 > UI/UE

zoj 1733 || poj 1458 Common Subsequence(最长公共子序列)

2010-11-26 12:37 453 查看
以前做的 今天看到一道类似的题,找不到解题报告。。。貌似忘写了。补一下。



这个的状态方程的意思是,两个序列,A B,A的前 i( 0 < i < lenA) 个元素 和B 的最长公共序列是多少。



maxlen[i][k]意思是,A序列的前i个元素和B序列的前k个元素的最长公共子序列。



#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <memory.h>
#define MAXLEN 300
using namespace std;
int maxlen[MAXLEN][MAXLEN];
int main(void)
{
	char str[MAXLEN],line[MAXLEN];
	int lens,lenl;
	while(cin >> str)
	{
		memset(maxlen,0,sizeof(maxlen));
		cin >> line;
		lens = strlen(str);
		lenl = strlen(line);
		for(int i=0; i<lens; i++)
			for(int k=0; k<lenl; k++)
				if( str[i] == line[k] )
					maxlen[i+1][k+1] = maxlen[i][k] + 1;
				else
					if( maxlen[i+1][k] > maxlen[i][k+1] )
						maxlen[i+1][k+1] = maxlen[i+1][k];
					else
						maxlen[i+1][k+1] = maxlen[i][k+1];
		cout << maxlen[lens][lenl] << endl;
	}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: