1 solutions
-
-2
#include<bits/stdc++.h> using namespace std; const int N=3010; int f[N][N]; /* f[i][j] 表示a的前i个序列和b的前j个序列 构成的以b[j]结尾的最长上升子序列的最大值 */ int a[N],b[N]; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } for(int j=1;j<=n;j++) { cin>>b[j]; } for(int i=1;i<=n;i++) //枚举第一个序列 { for(int j=1;j<=n;j++) //枚举第二个序列 { f[i][j]=f[i-1][j]; //不选a的第i个字符 if(a[i]==b[j]) //可以选 { int maxv=1; for(int k=1;k<j;k++) //最长上升子系列 { if(b[j]>b[k]) { maxv=max(maxv,f[i-1][k]+1); } } f[i][j]=max(maxv,f[i][j]); } } } int res=0; for(int i=1;i<=n;i++) { res=max(res,f[n][i]); } cout<<res; return 0; }
- 1
Information
- ID
- 220
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 7
- Tags
- (None)
- # Submissions
- 50
- Accepted
- 6
- Uploaded By