UVA1368- DNA Consensus String
来源:互联网 发布:win7无法启动网络共享 编辑:程序博客网 时间:2024/06/05 07:08
题意:给定m个长度均为n的DNA序列,求一个DNA序列,使其到所有序列的总Hamming距离尽量小。两个等长字符串的Hamming距离等于字符不同的位置个数。求字典序最小的解。
思路:我们可以依次枚举每一个位置上的字母,要使得总的Hamming最小,那么每个位置上要取相同个数最多的那个字母,相同的话要取字典序最小的那个。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 1005;const int N = 55;char str[N][MAXN], s[MAXN];int m, n, Min;int num[4];int Max(int a, int c, int g, int t) { return max(a, max(c, max(g, t)));}int main() { int cas; scanf("%d", &cas); while (cas--) { scanf("%d%d", &m, &n); for (int i = 0; i < m; i++) scanf("%s", str[i]); Min = 0; int a, c, g, t; for (int i = 0; i < n; i++) { a = c = g = t = 0; for (int j = 0; j < m; j++) { if (str[j][i] == 'A') a++; else if (str[j][i] == 'C') c++; else if (str[j][i] == 'G') g++; else if (str[j][i] == 'T') t++; } int k = Max(a, c, g, t); Min += m - k; if (k == a) s[i] = 'A'; else if (k == c) s[i] = 'C'; else if (k == g) s[i] = 'G'; else if (k == t) s[i] = 'T'; } s[n] = '\0'; printf("%s\n",s); printf("%d\n", Min); } return 0;}
0 0
- uva1368 - DNA Consensus String
- Uva1368 DNA Consensus String
- Uva1368 - DNA Consensus String
- UVA1368- DNA Consensus String
- UVA1368 - DNA Consensus String
- uva1368 - DNA Consensus String
- uva1368 - DNA Consensus String
- [UVA1368]DNA Consensus String
- UVa1368 DNA Consensus String
- UVa1368 DNA Consensus String
- UVa1368 DNA Consensus String
- UVa1368 - DNA Consensus String
- UVa1368-DNA Consensus String
- UVa1368 DNA Consensus string AC
- 3.7 DNA Consensus String UVA1368
- UVa1368-DNA Consensus String-DNA序列
- UVa1368——DNA Consensus String
- 习题3-7 UVa1368 DNA Consensus String
- java 快速排序 时间复杂度 空间复杂度 稳定性
- UVA - 10192Vacation(LIS)
- 【linux】挂载命令mount
- OnCreate消息函数
- hdu 2795 Billboard(线段树-剩余空间)
- UVA1368- DNA Consensus String
- leetcode Palindrome Partitioning II
- GIS地图在房地产中的应用
- 贝塞尔三次方曲线优化, 24次乘法转换成6次加法
- CTabView使用方法
- ASIHTTPRequest官方文档
- JAVA中file路径问题
- hdu 4925 Apple Tree
- ci得到控制器类名和函数名的方法和PHP获取当前类名、函数名、方法名方法