uva 1368 - DNA Consensus String(贪心)

题目大意:给定m个长度为n的DNA序列,求一个DNA序列,使其到所有序列的总hamming距离尽量小,如有多解,输出最小解。


解题思路:因为每个DNA序列都是相同长度的,所以可以枚举每一位DNA码,然后用贪心的思想选取出现次数最多的,如果有两个最多的,按要求用字典序小的。

#include <cstdio>

int main() {
	int T;
	scanf("%d", &T);
	while (T--) {
		int m, n, A[1010][100] = {0};
		char s[1010], B[10] = "ACGT";
		scanf("%d%d%*c", &m, &n);
		for (int i = 0; i < m; i++) {
			scanf("%s", s);
			for (int j = 0; j < n; j++)
				A[j][s[j]]++;
		}

		int ans = 0;
		for (int i = 0; i < n; i++) {
			int cur, max = 0;
			for (int j = 0; j < 4; j++)
				if (A[i][B[j]] > max) {
					max = A[i][B[j]];
					cur = B[j];
				}
			ans += m - max;
			printf("%c", cur);
		}
		printf("\n%d\n", ans);
	}
	return 0;
}


你可能感兴趣的:(uva 1368 - DNA Consensus String(贪心))