枚举每个可能的最终结果(必为某串的前缀/空串),计算操作步数。
#include<cstdio> int l1,l2,l3,c; int ans; char s1[51],s2[51],s3[51],ch; void chk(){ for(int i=1;i<=l1;i++){ int m1=0,m2=0; while(s1[m1]==s2[m1]&&m1<i)m1++; while(s1[m2]==s3[m2]&&m2<i)m2++; int v=l1+i+l2-m1*2+l3-m2*2; if(ans>v)ans=v; } } int main(){ scanf("%d%s%d%s%d%s",&l1,s1,&l2,s2,&l3,s3); ans=l1+l2+l3; chk(); c=l1;l1=l2;l2=c; for(int i=0;i<51;i++){ ch=s1[i]; s1[i]=s2[i]; s2[i]=ch; } chk(); c=l1;l1=l3;l3=c; for(int i=0;i<51;i++){ ch=s1[i]; s1[i]=s3[i]; s3[i]=ch; } chk(); printf("%d",ans); return 0; }
原文:http://www.cnblogs.com/ccz181078/p/5190354.html