习题3-7 DNA序列(DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368)
题目描述:
输入m个长度均为n的DNA序列,求一个DNA序列,到所有序列的总和Hamming距离尽量小。两个等长字符串的Hamming距离等于字符不同的位置个数,例如,ACGT和GCGA的Hammingg距离为2(左数第1,4个字符不同)
输入整数m和n(4<=m<=50, 4<=n<=1000),以及m个长度为n的DNA序列(只包含字母A,C,G,T),输出到m个序列的Hamming距离和最小的DNA序列和对应的距离,如有多解,要求为字典序最小的解。例如,对于下面5个DNA序列,最优解为TAAGATAC
TATGATAC
TAAGCTAC
AAAGATCC
TGAGATAC
TAAGATGT
解题思路:纵向比较每一个字符,选择一个ACGT中最合适的一个
#include<stdio.h>
#include<string.h>
using namespace std;
char s[51][1001];
char ans[1001];
int m, n;
int cal(char c, int j) {
// 字符串的第j个改为c时,在第j列上所得的Hamming距离和
int sum = 0;
for(int i = 0; i < m; i++) {
if(c != s[i][j]) sum++;
}
return sum;
}
int main(){
#ifdef LOCAL
freopen