您的位置:首页 > 其它

UVA 1625 Color Length - ACM/ICPC Daejeon 2011

2018-03-30 09:51 387 查看
#include<bits/stdc++.h>
using namespace std;
int i,j,v1,v2,l1,l2,cas;
int sq[26],sp[26],eq[26],ep[26];
int d[5010][5010],c[5010][5010];
char q[5010],p[5010];
int main(){
scanf("%d",&cas);
while(cas--){
scanf("\n%s\n%s",q+1,p+1);
l1=strlen(q+1);
l2=strlen(p+1);
for(i=1;i<=l1;i++)
q[i]-='A';
for(i=1;i<=l2;i++)
p[i]-='A';
memset(sq,0x3f,sizeof(sq));
memset(sp,0x3f,sizeof(sp));
memset(eq,-1,sizeof(eq));
memset(ep,-1,sizeof(ep));
for(i=1;i<=l1;i++){
sq[q[i]]=min(sq[q[i]],i);
eq[q[i]]=i;
}
for(i=1;i<=l2;i++){
sp[p[i]]=min(sp[p[i]],i);
ep[p[i]]=i;
}
for(i=0;i<=l1;i++)
for(j=0;j<=l2;j++){
if(i==0&&j==0)continue;
v1=0x3f3f3f3f;
v2=0x3f3f3f3f;
if(i)v1=d[i-1][j]+c[i-1][j];
if(j)v2=d[i][j-1]+c[i][j-1];
d[i][j]=min(v1,v2);
if(i){
c[i][j]=c[i-1][j];
if(sq[q[i]]==i&&sp[q[i]]>j)c[i][j]++;
if(eq[q[i]]==i&&ep[q[i]]<=j)c[i][j]--;
}
else if(j){
c[i][j]=c[i][j-1];
if(sp[p[j]]==j&&sq[p[j]]>i)c[i][j]++;
if(ep[p[j]]==j&&eq[p[j]]<=i)c[i][j]--;
}
}
printf("%d\n",d[l1][l2]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: