Human Gene Functions

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
描述
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.

输入
The input consists of T test cases. The number of test cases ) (T is given in the first line of the input file. 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.
输出
The output should print the similarity of each test case, one per line.
样例输入
2
7 AGTGATG
5 GTTAG
7 AGCTATT
9 AGCTTTAAA

样例输出

14

24

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int score[5][5]={5,-1,-2,-1,-3,-1,5,-3,-2,-4,-2,-3,5,-2,-2,-1,-2,-2,5,-1,-3,-4,-2,-1,0};
int map[105][105];
int Char(char s)
{switch(s){case 'A':return 0;case 'C':return 1;case 'G':return 2;case 'T':return 3;case '-':return 4;}
}
int main()
{int T,i,j,n,m;char s1[105],s2[105];cin>>T;while(T--){cin>>n>>s1;cin>>m>>s2;map[0][0]=0;for(i=1;i<=n;i++)map[i][0]=map[i-1][0]+score[Char(s1[i-1])][4];for(i=1;i<=m;i++)map[0][i]=map[0][i-1]+score[4][Char(s2[i-1])];for(i=1;i<=n;i++){for(j=1;j<=m;j++){int m1=map[i-1][j]+score[Char(s1[i-1])][4];int m2=map[i][j-1]+score[4][Char(s2[j-1])];int m3=map[i-1][j-1]+score[Char(s1[i-1])][Char(s2[j-1])];map[i][j]=max(m1,max(m2,m3));}}printf("%d\n",map[n][m]);}
}

nyoj-Human Gene Functions相关推荐

  1. Human Gene Functions(最长公共子序列变形题)

    [题目]:问题 B:  Human Gene Functions [来源]:点击打开链接 [解法]:这个题是最长公共子序列的变形题. 1.确定状态:状态表示显然是用二维数组表示DP[i][j]当前i和 ...

  2. 刷题总结——Human Gene Functions(hdu1080)

    题目: Problem Description It is well known that a human gene can be considered as a sequence, consisti ...

  3. 动态规划(DP),Human Gene Functions

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1027 http://poj.org/problem?id=108 ...

  4. HDU 1080 Human Gene Functions

    DP,比较容易想到是2维DP,表示到第一个字符串的i和第二个字符串的j最大值是多少, 字符串下标的0在这里对应的i,j是1 #include<algorithm> #include< ...

  5. POJ1080 Human Gene Functions 动态规划 LCS的变形

    题意读了半年,唉,给你两串字符,然后长度不同,你能够用'-'把它们补成同样长度,补在哪里取决于得分,它会给你一个得分表,问你最大得分 跟LCS非常像的DP数组 dp[i][j]表示第一个字符串取第i个 ...

  6. 【HDU - 1080】Human Gene Functions(dp,可编辑距离类问题)

    题干: 给你两个DNA序列(长度不一定相同),你可以在其中任意位置上加入空格,使得最终他俩长度相同,最终相同长度的两个DNA序列会有个相似度比较(每个字符相对应的比较),问你如何放置这些空格使得总相似 ...

  7. POJ 1080 Human Gene Functions(DP:LCS)

    题意: 人类基因有两条,现在给出两个字符串,有长有短,可以在字符串中插入空格,要求对照表使两个字符串得出的相似值最大. 要点: 是LCS的变形,用dp[i][j]存储第一个字符串前i个字符与第二个字符 ...

  8. POJ - 1080 Human Gene Functions解题报告(求最长相同子序列)

    题目大意: 太长的英语,我就直接读了测试样例和题目中一些可以看的....好像是关于什么人类基因工程什么的, 腺嘌呤脱氧核糖核苷酸~ 每组测试实例给你两串由AGCT四个字母组成的字符串(每个字符串100 ...

  9. poj 1080 Human Gene Functions (最长公共子序列变形)

    题意:有两个代表基因序列的字符串s1和s2,在两个基因序列中通过添加"-"来使得两个序列等长:其中每对基因匹配时会形成题中图片所示匹配值,求所能得到的总的最大匹配值. 题解:这题运 ...

  10. POJ1080 Human Gene Functions(LCS)

    题目链接. 分析: 和 LCS 差不多. #include <iostream> #include <cstdio> #include <cstdlib> #inc ...

最新文章

  1. 【 MATLAB 】如何产生一个均值和方差可控的正态分布矩阵(randn)?
  2. Kotlin学习与实践 (十)Kotlin的可空性
  3. C++ string的使用
  4. 【解析】UVA-548 Tree
  5. Ocelot(三)- 服务发现
  6. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 25丨不同性别每日分数总计【难度中等】​
  7. 我对一个js问题的分析
  8. linux(十三)之磁盘分区、创建文件系统、挂载
  9. PHP中 htmlspecialchars,htmlentities, nl2br函数
  10. Linux编程(7)_gdb
  11. 股票交易软件接口编程语言
  12. python 获取网页特定图片并保存至本地
  13. 35岁学python爬虫_学习python12小时后,告诉想学爬虫的你,别怕,爬虫,没那么难抓...
  14. MVDR最小方差无畸形相应波束形成器 Python 实现
  15. 互联网创业最好的时代
  16. 50欧姆线设计 高频pcb_pcb 50欧姆阻抗匹配设计技巧
  17. 解决RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED 踩过的坑(配置环境:linux+anaconda3+pytorch ...)
  18. 在网页中快速集成自己的即时通聊天,实现类是淘宝旺旺的在线洽谈效果。
  19. 短视频开发,录制视频添加背景音乐功能实现
  20. S32K的lin组件使用(不用LDF配置LIN)

热门文章

  1. 神策 FM | 20 种方法,让你成为用户的知心朋友
  2. 区块链开发_以太坊多重签名
  3. 经典算法题每日演练——第十题 树状数组
  4. win7下搭建GO开发环境 - eclipse 配置GO开发
  5. Silverlight MMORPG团队项目截图
  6. ifm management of technology q and a session 2
  7. systematic approach for educational resource gathering
  8. C# 容器重用避免GC 的论证
  9. 垂直居中 absolute 和 flex 方法
  10. Python3的urllib.parse常用函数小结