博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hdu 1080
阅读量:6910 次
发布时间:2019-06-27

本文共 5160 字,大约阅读时间需要 17 分钟。

Human Gene Functions

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 2271    Accepted Submission(s): 1285

Problem Description
It is well known that a human gene can be considered as a sequence, consisting of four nucleotides, which are simply denoted by four letters, A, C, G, and T. Biologists have been interested in identifying human genes and determining their functions, because these can be used to diagnose human diseases and to design new drugs for them. 
A human gene can be identified through a series of time-consuming biological experiments, often with the help of computer programs. Once a sequence of a gene is obtained, the next job is to determine its function. One of the methods for biologists to use in determining the function of a new gene sequence that they have just identified is to search a database with the new gene as a query. The database to be searched stores many gene sequences and their functions – many researchers have been submitting their genes and functions to the database and the database is freely accessible through the Internet. 
A database search will return a list of gene sequences from the database that are similar to the query gene. Biologists assume that sequence similarity often implies functional similarity. So, the function of the new gene might be one of the functions that the genes from the list have. To exactly determine which one is the right one another series of biological experiments will be needed. 
Your job is to make a program that compares two genes and determines their similarity as explained below. Your program may be used as a part of the database search if you can provide an efficient one. 
Given two genes AGTGATG and GTTAG, how similar are they? One of the methods to measure the similarity of two genes is called alignment. In an alignment, spaces are inserted, if necessary, in appropriate positions of the genes to make them equally long and score the resulting genes according to a scoring matrix. 
For example, one space is inserted into AGTGATG to result in AGTGAT-G, and three spaces are inserted into GTTAG to result in –GT--TAG. A space is denoted by a minus sign (-). The two genes are now of equal length. These two strings are aligned: 
AGTGAT-G 
-GT--TAG 
In this alignment, there are four matches, namely, G in the second position, T in the third, T in the sixth, and G in the eighth. Each pair of aligned characters is assigned a score according to the following scoring matrix.
* denotes that a space-space match is not allowed. The score of the alignment above is (-3)+5+5+(-2)+(-3)+5+(-3)+5=9. 
Of course, many other alignments are possible. One is shown below (a different number of spaces are inserted into different positions): 
AGTGATG 
-GTTA-G 
This alignment gives a score of (-3)+5+5+(-2)+5+(-1) +5=14. So, this one is better than the previous one. As a matter of fact, this one is optimal since no other alignment can have a higher score. So, it is said that the similarity of the two genes is 14.

 

Input
The input consists of T test cases. The number of test cases ) (T is given in the first line of the input. Each test case consists of two lines: each line contains an integer, the length of a gene, followed by a gene sequence. The length of each gene sequence is at least one and does not exceed 100. 

 

Output
The output should print the similarity of each test case, one per line. 

 

Sample Input
2 7 AGTGATG 5 GTTAG 7 AGCTATT 9 AGCTTTAAA

 

Sample Output
14 21

 Accepted Code:

1 /************************************************************************* 2     > File Name: D.cpp 3     > Author: Stomach_ache 4     > Mail: sudaweitong@gmail.com 5     > Created Time: 2014年07月20日 星期日 20时04分25秒 6     > Propose:  7  ************************************************************************/ 8 #include  9 #include 
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include
16 using namespace std;17 18 const int maxn = 105;19 char s[maxn], t[maxn];20 int dp[maxn][maxn];21 int a[5][5] = { { 5, -1, -2, -1, -3}, {-1, 5, -3, -2, -4},22 {-2, -3, 5, -2, -2}, {-1, -2, -2, 5, -1},23 {-3, -4, -2, -1, 0}};24 25 26 int 27 max(int x, int y, int z) {28 return x > y ? 29 x > z ? x : z30 : y > z ? y : z;31 }32 33 int34 main(void) {35 #ifndef ONLINE_JUDGE36 freopen("in.txt", "r", stdin);37 #endif38 map
match;39 match['A'] = 0;40 match['C'] = 1;41 match['G'] = 2;42 match['T'] = 3;43 match[' '] = 4;44 int c;45 scanf("%d", &c);46 while (c--) {47 int len1, len2;48 scanf("%d %s", &len1, s+1);49 scanf("%d %s", &len2, t+1);50 dp[0][0] = 0;51 for (int i = 1; i <=len1; i++) dp[i][0] = dp[i-1][0] + a[match[s[i]]][4];52 for (int i = 1; i <=len2; i++) dp[0][i] = dp[0][i-1] + a[match[t[i]]][4];53 for (int i = 1; i <= len1; i++) {54 for (int j = 1; j <= len2; j++) {55 dp[i][j] = max(dp[i][j-1]+a[match[t[j]]][4], dp[i-1][j]+a[match[s[i]]][4], dp[i-1][j-1]+a[match[s[i]]][match[t[j]]]);56 }57 }58 printf("%d\n", dp[len1][len2]);59 }60 61 return 0;62 }

 

转载于:https://www.cnblogs.com/Stomach-ache/p/3857354.html

你可能感兴趣的文章
centos安装man中文手册
查看>>
网络通信与面相对象
查看>>
获取图片的真实宽高
查看>>
基于VHDL利用PS2键盘控制的电子密码锁设计
查看>>
深入分析JavaWeb Item22 -- 国际化(i18n)
查看>>
SQL Server -- 随笔
查看>>
Java Annotation 应用 -- 导出Excel表格
查看>>
git使用教程1-本地代码上传到github
查看>>
wkhtmlpdf安装以及中文乱码
查看>>
oc43--野指针和空指针
查看>>
装饰器1、无参数的装饰器 2、有参数的装饰器 3、装饰器本身带参数的以及如果函数带return结果的情况...
查看>>
Selenium:三种等待方式
查看>>
关于脏读、不可重复读和幻读
查看>>
Maven详解(七)------ 创建Web工程以及插件原理
查看>>
二进制传输与文本传输的区别
查看>>
YMP运行初始化步骤
查看>>
Getting Started with the G1 Garbage Collector(译)
查看>>
MySql5.7.11 for Windows 安装精简版(一)
查看>>
Java线程池
查看>>
imx6设备树pinctrl解析【转】
查看>>