bzoj1789 Necklace Y型项链

我们可以发现答案目标串即为某一个串的前缀,所以只要枚举前缀再计算两个串需要转移的距离即可

这种题目不要老往dp上想,要善于利用题目条件

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<string>
 4 #include<cstring>
 5 using namespace std;
 6 string a,b,c;
 7 string s;
 8 int na,nb,nc;
 9 int ans=19991231;
10 int cal(string x,string y)
11 {
12     int i=1;
13     while(x[i]==y[i] && i<x.size() && i<y.size())i++;
14    // cout<<x<<" "<<y<<" "<<i<<endl;
15     i--;
16     return x.size()-i-1+y.size()-i-1;
17 }
18 int main()
19 {
20     cin>>na>>a;
21     cin>>nb>>b;
22     cin>>nc>>c;
23     a="0"+a;
24     b="0"+b;
25     c="0"+c;
26     ans=na+nb+nc;
27     s="0";
28     for(int i=1;i<=na;i++)
29     {
30         s=s+a[i];
31         ans=min(ans,cal(s,a)+cal(s,b)+cal(s,c));
32     }
33     s="0";
34     for(int i=1;i<=nb;i++)
35     {
36         s=s+b[i];
37         ans=min(ans,cal(s,a)+cal(s,b)+cal(s,c));
38     }
39     s="0";
40     for(int i=1;i<=nc;i++)
41     {
42         s=s+c[i];
43         ans=min(ans,cal(s,a)+cal(s,b)+cal(s,c));
44     }
45     printf("%d\n",ans);
46     return 0;
47 }
View Code

 

posted @ 2014-08-23 15:42  溪桥,吾愿  阅读(193)  评论(0编辑  收藏  举报