hud1151 動態規劃 最大的公共子序列

換一種視覺發表於2014-11-06

就是求最大公共子序列,很經典的一題,這題就當複習演算法啦

遞推公式:
                c[i][j]=c[i-1][j-1]+1 當a[i-1]==b[j-1]時
          
                c[i][j]=c[i-1][j]>c[i][j-1]?c[i-1][j]:c[i][j-1]  當a[i-1]!=a[j-1]時

#include<stdio.h>
#include<cstring>

int c[500][500];
char a[500],b[500];

int LCS(int m,int n)
{
	int i,j;
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++){
			if(a[i-1]==b[j-1])
			{
				c[i][j]=c[i-1][j-1]+1;
			}
			else{
				c[i][j]=c[i-1][j]>c[i][j-1]?c[i-1][j]:c[i][j-1];
			}
		}
	}
	return c[m][n];
}

int main()
{
	int i,j,m,n;
	
	while(scanf("%s %s",a,b)!=EOF)
	{
		memset(c,0,sizeof(c));
		i=strlen(a);
		j=strlen(b);
		printf("%d\n",LCS(i,j));
	}
	
	return 0;
}



         

相關文章