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++ ,