zoukankan      html  css  js  c++  java
  • UVA-1368 DNA Consensus String (贪心)

     

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

    应该是道贪心题,因为每一列的值与其他列没有什么关系(这是判断贪心问题的根本大法),对于每一列找出使其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("
    %d
    ",ans);
    41     }
    42     return 0;
    43 }

    DNA Consensus String

     

  • 相关阅读:
    Shell脚本精选 规格严格
    转载Http一篇文章 规格严格
    Eclipse插件安装 规格严格
    Jad用法(转) 规格严格
    Java通过代理服务器访问外部网络 规格严格
    hwclock(Linux) 规格严格
    Linux下的多线程编程
    30岁前男人需要完成的事
    FTP主动模式及被动模式
    6年软件开发经验总结
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/13860580.html
Copyright © 2011-2022 走看看