POJ 1458 Common Subsequence DP(LCS)


题意:求最大公共子序列
题解:
当 i = 0 或者 j = 0 时 , c[i][j] = 0
当 i , j > 0 ; xi = yi 时 , c[i][j] = c[i-1][j-1] + 1
当 i , j > 0 ; xi != yi 时 , c[i][j] = max { c[i][j-1] , c[i-1][j] }

#include <cstring>
#include <iostream>
using namespace std;

#define N 1001
char str1[N], str2[N];
int dp[N][N];

int max ( int a, int b )
{
	return a > b ? a : b;
}

int main()
{
	int len1, len2, i, j;
    //freopen("a.txt","r",stdin);
	while ( scanf("%s %s", str1 + 1, str2 + 1 ) != EOF )
	{
		len1 = strlen(str1+1);
		len2 = strlen(str2+1);

		for ( i = 0; i <= len1 || i <= len2; i++ )
			dp[i][0] = dp[0][i] = 0;

		for ( i = 1; i <= len1; i++ )
		{
			for ( j = 1; j <= len2; j++ )
			{
				if ( str1[i] == str2[j] )
					dp[i][j] = dp[i-1][j-1] + 1;
				else
					dp[i][j] = max ( dp[i-1][j], dp[i][j-1] );
			}
		}
		printf("%d\n",dp[len1][len2]);
	}
	return 0;
}



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号