码迷,mamicode.com
首页 > 其他好文 > 详细

UVA-1368 DNA Consensus String (贪心)

时间:2020-10-22 23:11:08      阅读:33      评论:0      收藏:0      [点我收藏+]

标签:boto   sensu   style   pre   次数   scan   namespace   font   while   

技术图片

 

 技术图片

 

 这种线性最值问题一般不是贪心就是动归

应该是道贪心题,因为每一列的值与其他列没有什么关系(这是判断贪心问题的根本大法),对于每一列找出使其Hamming距离最小的值即可,由于此题只要值相同就是0,值不同就是1,没有远近之分,所以每一个值都是原来出现次数最多的值。

一定注意出现多解的时候如何选择!!!!此题就被坑了,一定注意此题是输出字典序最小的!!!

 

 

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 const int MAX=1005;
 4 int t,n,m,ans;
 5 char s[55][MAX],as[MAX];
 6 struct Cha{
 7     char c;
 8     int num;
 9     bool operator < (Cha &tt) const {
10         return num<tt.num;
11     }
12 }a[5],an;
13 int main(){
14     freopen ("string.in","r",stdin);
15     freopen ("string.out","w",stdout);
16     int i,j;
17     scanf("%d",&t);
18     a[1].c=A,a[2].c=T,a[3].c=C,a[4].c=G;
19     while (t--){
20         ans=0;
21         scanf("%d%d",&n,&m);
22         for (i=1;i<=n;i++) scanf("%s",s[i]+1);
23         for (i=1;i<=m;i++){
24             a[1].num=a[2].num=a[3].num=a[4].num=0;
25             for (j=1;j<=n;j++){
26                 if (s[j][i]==A) a[1].num++;
27                 if (s[j][i]==T) a[2].num++;
28                 if (s[j][i]==C) a[3].num++;
29                 if (s[j][i]==G) a[4].num++;
30             }
31             an=a[1];
32             if (an<a[3]) an=a[3];
33             if (an<a[4]) an=a[4];
34             if (an<a[2]) an=a[2];
35             as[i]=an.c;
36             ans+=n-an.num;
37         }
38         for (i=1;i<=m;i++)
39             printf("%c",as[i]);
40         printf("\n%d\n",ans);
41     }
42     return 0;
43 }

 

 

 

DNA Consensus String

 

UVA-1368 DNA Consensus String (贪心)

标签:boto   sensu   style   pre   次数   scan   namespace   font   while   

原文地址:https://www.cnblogs.com/keximeiruguo/p/13860580.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!