HDOJ-1159 最长公共子序列
对字符串的赋值是从arr+1开始,其他的话直接按递推公式来就行了
1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <cstring> 5 #include <cstdlib> 6 #include <cctype> 7 using namespace std; 8 int dp[1010][1010]; 9 int max2(int x, int y) 10 { 11 if(x > y) 12 return x; 13 else 14 return y; 15 } 16 int main() 17 { 18 char arr1[1010], arr2[1010]; 19 while(cin >> arr1 + 1 >> arr2 + 1) 20 { 21 int len1 = strlen(arr1 + 1); 22 int len2 = strlen(arr2 + 1); 23 memset(dp, 0, sizeof(dp)); 24 for(int i = 1; i <= len1; i++) 25 for(int j = 1; j <= len2; j++) 26 { 27 if(arr1[i] == arr2[j]) 28 dp[i][j] = dp[i - 1][j - 1] + 1; 29 else 30 dp[i][j] = max2(dp[i - 1][j], dp[i][j - 1]); 31 } 32 cout << dp[len1][len2] << endl; 33 } 34 return 0; 35 36 }
浙公网安备 33010602011771号