题目传送门
解题思路:
本题朴素求最长公共子序列即可,但是空间不够,怎么办呢?
空间不够,滚动数组来救
AC代码:
1 #include<iostream> 2 #include<cstdio> 3 4 using namespace std; 5 6 string l,l1; 7 int f[2][10002],m; 8 9 inline int max(int a,int b) { 10 if(a >= b) return a; 11 return b; 12 } 13 14 int main() { 15 cin >> l >> l1; 16 for(int i = 0;i < l.length(); i++) { 17 for(int j = 1;j <= l1.length(); j++) { 18 if(l[i] == l1[j-1]) 19 f[m][j] = f[m^1][j-1] + 1; 20 else 21 f[m][j] = max(f[m^1][j],f[m][j-1]); 22 } 23 m = m ^ 1; 24 } 25 printf("%d",f[m^1][l1.length()]); 26 return 0; 27 }