UVa 1368 - DNA Consensus String

Posted nicetomeetu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 1368 - DNA Consensus String相关的知识,希望对你有一定的参考价值。

找一个跟所给的序列的总Hamming距离最小的序列,输出字典序最小的解

Hamming距离就是两个序列有几个位置的不同字符

 1 #include <iostream>
 2 using namespace std;
 3 int t,n,m,ans1,cnt,tmp1,tmp2,tmp3,tmp4;
 4 char s[55][1005],ans2[1005];
 5 void judge()
 6 {
 7     if(tmp1>=tmp2&&tmp1>=tmp3&&tmp1>=tmp4) 
 8     {
 9         ans2[cnt++]=A;
10         ans1+=tmp2+tmp3+tmp4;
11     } 
12     else if(tmp2>=tmp1&&tmp2>=tmp3&&tmp2>=tmp4)
13     {
14         ans2[cnt++]=C;
15         ans1+=tmp1+tmp3+tmp4;
16     }
17     else if(tmp3>=tmp2&&tmp3>=tmp1&&tmp3>=tmp4)
18     {
19         ans2[cnt++]=G;
20         ans1+=tmp1+tmp2+tmp4;
21     }
22     else
23     {
24         ans2[cnt++]=T;
25         ans1+=tmp1+tmp2+tmp3;
26     }
27 }
28 void fuc()
29 {
30     ans1=cnt=0;
31     for(int j=0;j<m;j++)
32     {
33         tmp1=tmp2=tmp3=tmp4=0;
34         for(int i=0;i<n;i++)
35         {
36             switch(s[i][j])
37             {
38                 case A: tmp1++;break;
39                 case C: tmp2++;break;
40                 case G: tmp3++;break;
41                 case T: tmp4++;break;
42             }
43         }    
44         judge();
45     }
46     ans2[cnt]=\0;
47 }
48 int main()
49 {
50     cin>>t;
51     while(t--)
52     {
53         cin>>n>>m;
54         for(int i=0;i<n;i++) cin>>s[i];
55         fuc();
56         cout<<ans2<<endl;
57         cout<<ans1<<endl;
58     }
59 }

 

以上是关于UVa 1368 - DNA Consensus String的主要内容,如果未能解决你的问题,请参考以下文章

UVa 1368 - DNA Consensus String

DNA Consensus String UVA - 1368

UVA-1368 DNA Consensus String (贪心)

算法竞赛入门经典(第二版)3-7DNA序列UVA1368

DNA序列(DNA Consensus String)

DNA序列(DNA Consensus String)