记录编号 216818 评测结果 AAAAAAAAAA
题目名称 最长公共子序列 最终得分 100
用户昵称 Gravatarsxysxy 是否通过 通过
代码语言 C++ 运行时间 0.282 s
提交时间 2015-12-31 14:12:18 内存使用 0.30 MiB
显示代码纯文本
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SHARP ('.')
#define MAXL (5005)
#define AC_max(x,y) (x<y?y:x)

typedef struct TAG_ANSI_STRING
{
	char *buffer;
	int length;
}ANSI_STRING, *PANSI_STRING;

void fast_read(PANSI_STRING str)
{
	char c;
	while((c = getchar()) && c != '.') 
		str -> buffer[str -> length ++] = c;
}

void init_string(PANSI_STRING str, int reserve_len)
{
	str -> buffer = (char *)malloc(reserve_len);
	str -> length = 0;
}

void des_string(PANSI_STRING str)
{
	free(str -> buffer);
}

int dp[2][MAXL];
int lcs(PANSI_STRING stra, PANSI_STRING strb)
{
	int i,j;
	for(i = 1; i <= stra -> length; i++)
		for(j = 1; j <= strb -> length; j++)
			if(stra -> buffer[i-1] == strb -> buffer[j-1])
				dp[i&1][j] = dp[!(i&1)][j-1] + 1;
			else
				dp[i&1][j] = AC_max(dp[!(i&1)][j], dp[i&1][j-1]);
	return dp[stra -> length & 1][j-1];
}

void set_file()
{
	freopen("lcslength.in", "r", stdin);
	freopen("lcslength.out", "w", stdout);		
}

int main()
{
	set_file();	
	ANSI_STRING stra;
	ANSI_STRING strb;
	init_string(&stra, MAXL);
	init_string(&strb, MAXL);
	 
	fast_read(&stra);
	fast_read(&strb);
	
	printf("%d\n", lcs(&stra, &strb));
	
	des_string(&stra);
	des_string(&strb);
	return 0;
}