1 solutions
-
3
#include<bits/stdc++.h> using namespace std; const int N=210,M=10010; int a[N],b[M]; int f[N][M]; int main() { int t; cin>>t; int n,m; cin>>n; for(int i=1;i<=n;i++) //第一个序列 { cin>>a[i]; } cin>>m; for(int i=1;i<=m;i++) //第二个序列 { cin>>b[i]; } for(int i=1;i<=n;i++) //枚举第一个序列的第i个字符 { for(int j=1;j<=m;j++) //枚举第二个序列的第j个字符 { f[i][j]=max(f[i-1][j],f[i][j-1]); //不选第i个和不选第j个 if(a[i]==b[j]) //相等 { f[i][j]=max(f[i][j],f[i][j-1]+1); // 已有的最大值,从i和j-1过来 } } } cout<<f[n][m]; return 0; }
- 1
Information
- ID
- 215
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 12
- Accepted
- 6
- Uploaded By