题意:
???????? 最长公共上升子序列。
思路:
???????? 这道题可以用DP做,比较麻烦的是两个人要一块搞,可以用两个数组,一个是小明的DP,另一个是春娇的DP,转移方程大概就是dp[i]=dp[i-1]+1,dp[i]指以i结尾的最长上升子序列的长度是多少,dp[i]要不断取max,而ans是取小明和春娇的dp数组的min的最大值max。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[200001],b[200001],dp[200001],dpp[200001],ans;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
scanf("%d",&b[i]);
for(int i=1;i<=n;i++)
{
dp[a[i]]=max(dp[a[i]-1]+1,dp[a[i]]);
dpp[b[i]]=max(dpp[b[i]-1]+1,dpp[b[i]]);
}
for(int j=1;j<=n;j++)
ans=max(ans,min(dp[j],dpp[j]));
printf("%d",ans);
return 0;
}
|