小明与春娇叠积木---题解
题意:
最长公共上升子序列。
思路:
这道题可以用DP做,比较麻烦的是两个人要一块搞,可以用两个数组,一个是小明的DP,另一个是春娇的DP,转移方程大概就是dp[i]=dp[i-1]+1,dp[i]指以i结尾的最长上升子序列的长度是多少,dp[i]要不断取max,而ans是取小明和春娇的dp数组的min的最大值max。
代码:
#include
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;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
