当前位置:编程学习 > C/C++ >>

hdu 1423 最长公共递增子序列

刚刚习得这一技巧,做的太好了,可以直接拿来当模板用。估计也不会有什么变式之类的麻烦的东西。直接贴代码,太短了,一看就记住了。

[cpp]
#include<iostream>  
using namespace std; 
int a[505],b[505],f[505]; 
int main() 

    int T,i,n1,n2,j,k,max; 
    cin>>T; 
    for(i=1;i<=T;i++) 
    { 
        cin>>n1; 
        for(j=1;j<=n1;j++) 
            cin>>a[j]; 
        cin>>n2; 
        for(j=1;j<=n2;j++) 
            cin>>b[j]; 
        memset(f,0,sizeof(f)); 
        for(j=1;j<=n1;j++) 
        { 
            max=0; 
            for(k=1;k<=n2;k++) 
            { 
                if(a[j]>b[k]&&max<f[k]) 
                    max=f[k]; 
                if(a[j]==b[k]) 
                    f[k]=max+1; 
            } 
        } 
        max=0; 
        for(j=1;j<=n2;j++) 
            if(f[j]>max) 
                max=f[j]; 
        cout<<max<<endl; 
        if(i!=T) 
            cout<<endl; 
    } 
    return 0; 

#include<iostream>
using namespace std;
int a[505],b[505],f[505];
int main()
{
    int T,i,n1,n2,j,k,max;
    cin>>T;
    for(i=1;i<=T;i++)
    {
        cin>>n1;
        for(j=1;j<=n1;j++)
            cin>>a[j];
        cin>>n2;
        for(j=1;j<=n2;j++)
            cin>>b[j];
        memset(f,0,sizeof(f));
        for(j=1;j<=n1;j++)
        {
            max=0;
            for(k=1;k<=n2;k++)
            {
                if(a[j]>b[k]&&max<f[k])
                    max=f[k];
                if(a[j]==b[k])
                    f[k]=max+1;
            }
        }
        max=0;
        for(j=1;j<=n2;j++)
            if(f[j]>max)
                max=f[j];
        cout<<max<<endl;
        if(i!=T)
            cout<<endl;
    }
    return 0;
}

 

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,