#include<bits/stdc++.h> using namespace std; int a[100000]; int b[100000]; int n; int f[10000][10000]; void dp() { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(a[i-1]==b[j-1]) { f[i][j]=f[i-1][j-1]+1; } else { f[i][j]=max(f[i-1][j],f[i][j-1]); } } } } int main() { cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } for(int i=0;i<n;i++) { cin>>b[i]; } dp(); cout<<f[n][n]; }
中国矿业大学——算法作业2——最长公共子序列(数字型)
最新推荐文章于 2025-12-03 13:56:23 发布
该代码使用C++编程,通过动态规划方法计算两个字符串的最长公共子序列。它首先初始化一个二维矩阵f,然后通过遍历输入的两个字符串a和b,比较字符是否相等来更新矩阵。最后输出矩阵的最后一个元素,即为最长公共子序列的长度。
149

被折叠的 条评论
为什么被折叠?



