您的位置:首页 > 其它

UVa10635 Prince and Princess

2017-09-07 13:24 176 查看
题目描述 传送门

求两序列的LCS,当序列元素两两互不相等可转化为LIS。

LIS可以用O(nlogn)的算法求解。

(但我还是理解不透彻,总感觉在背模板…)

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=70000;
int a[maxn],b[maxn],c[maxn],d[maxn],g[maxn];
int main(){
int t,kase=0;
cin>>t;
while(t--){
int n,p,q;
scanf("%d%d%d",&n,&p,&q);
memset(c,0,sizeof(c));
for(int i=1;i<=p+1;i++){
scanf("%d",&a[i]);
c[a[i]]=i;
}
for(int i=1;i<=q+1;i++){
scanf("%d",&b[i]);
b[i]=c[b[i]];
}
for(int i=1;i<=q+1;i++) g[i]=1e9;
g[0]=0;
d[0]=0;
for(int i=1;i<=q+1;i++){
int k=lower_
abbe
bound(g,g+q+2,b[i])-g;
d[i]=k;
g[k]=b[i];
}
printf("Case %d: %d\n",++kase,d[q+1]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: