hdu 5904 LCIS(简单dp)

来源:互联网 发布:apk软件开发 编辑:程序博客网 时间:2024/06/05 17:41

点击打开链接

#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>using namespace std;const int M=1e6+20;int a[M],b[M];//consists of consecutive values in increasing order//递增的值要是连续的 易得递推方程为 dp[a[i]]=max(dp[a[i],dp[a[i]-1]+1)int d1[M],d2[M];//d[i] 表示为以a[i]结尾的连续valve的lIS int ans[M];//以a[i]结尾的LCIS int main(){int t;cin>>t;while(t--){for(int i=0;i<M;i++){d1[i]=0;}for(int i=0;i<M;i++){d2[i]=0;} for(int i=0;i<M;i++){ans[i]=0;}int n,m;cin>>n>>m;for(int i=1;i<=n;i++){scanf("%d",&a[i]);d1[a[i]]=max(d1[a[i]],d1[a[i]-1]+1);} for(int i=1;i<=m;i++){scanf("%d",&b[i]);d2[b[i]]=max(d2[b[i]],d2[b[i]-1]+1);}int res=0;//a[i]中没有 b[i]中有的ans[b[i]] lCIS为0 for(int i=1;i<=n;i++){ans[a[i]]=max(ans[a[i]],min(d1[a[i]],d2[a[i]])); //两者的LCS由较小的d决定 res=max(res,ans[a[i]]); }cout<<res<<endl;}return 0; } 


0 0
原创粉丝点击