标签:ica iostream ota rac line time measure accept width
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 18007 | Accepted: 10012 |
Description
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.
Input
Output
Sample Input
2 7 AGTGATG 5 GTTAG 7 AGCTATT 9 AGCTTTAAA
Sample Output
14 21
Source
那么dp[n][m]就是要求的最大值。
#include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> #include<stdlib.h> using namespace std; int n,m; int map[301][301]; int dp[110][110]; char str1[110]; char str2[110]; void init() { map[‘A‘][‘A‘]=5; map[‘C‘][‘C‘]=5; map[‘G‘][‘G‘]=5; map[‘T‘][‘T‘]=5; map[‘-‘][‘-‘]=-1000; map[‘A‘][‘C‘]=map[‘C‘][‘A‘]=-1; map[‘A‘][‘G‘]=map[‘G‘][‘A‘]=-2; map[‘A‘][‘T‘]=map[‘T‘][‘A‘]=-1; map[‘A‘][‘-‘]=map[‘-‘][‘A‘]=-3; map[‘C‘][‘G‘]=map[‘G‘][‘C‘]=-3; map[‘C‘][‘T‘]=map[‘T‘][‘C‘]=-2; map[‘C‘][‘-‘]=map[‘-‘][‘C‘]=-4; map[‘G‘][‘T‘]=map[‘T‘][‘G‘]=-2; map[‘G‘][‘-‘]=map[‘-‘][‘G‘]=-2; map[‘T‘][‘-‘]=map[‘-‘][‘T‘]=-1; } int maxx(int a,int b,int c) { a = max(a,b); a = max(a,c); return a; } int main() { int T; init(); scanf("%d",&T); while(T--) { scanf("%d%s",&n,str1); scanf("%d%s",&m,str2); dp[0][0] = 0; for(int i=1;i<=n;i++) { dp[i][0] = dp[i-1][0] + map[str1[i-1]][‘-‘]; } for(int j=1;j<=m;j++) { dp[0][j] = dp[0][j-1] + map[‘-‘][str2[j-1]]; } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { int amax = dp[i][j-1] + map[‘-‘][str2[j-1]]; int bmax = dp[i-1][j] + map[str1[i-1]][‘-‘]; int cmax = dp[i-1][j-1] + map[str1[i-1]][str2[j-1]]; dp[i][j] = maxx(amax,bmax,cmax); } } printf("%d\n",dp[n][m]); } return 0; }
POJ 1080 Human Gene Functions(DP)
标签:ica iostream ota rac line time measure accept width
原文地址:http://www.cnblogs.com/cynchanpin/p/6885894.html