题意:求最大公共子序列
题解:
当 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; }
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。