程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 1423 最長公共遞增子序列

hdu 1423 最長公共遞增子序列

編輯:C++入門知識

剛剛習得這一技巧,做的太好了,可以直接拿來當模板用。估計也不會有什麼變式之類的麻煩的東西。直接貼代碼,太短了,一看就記住了。

[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;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved