标签:dash 测试 sample sim rest plain miss tag leo
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 19573 | Accepted: 10919 |
Description
Input
Output
Sample Input
2 7 AGTGATG 5 GTTAG 7 AGCTATT 9 AGCTTTAAA
Sample Output
14 21
题目大意是就是求两基因的相似度,先要在每个基因对中加入若干空格,然后再依次加上匹配度,详见上表,则相似度就是最大的匹配度和
例如对于测试数据一,加上空格则变成
AGTGAT--G
-GT----TAG
则相似度就是(-3)+5+5+(-2)+5+(-1)+5=14,可以证明这是最大的,故为所求
此题为dp,详见代码
1 #include<iostream> 2 #include<cstdlib> 3 #include<cstdio> 4 #include<cstring> 5 #include<algorithm> 6 #include<cmath> 7 using namespace std; 8 int map[][5]={ {5,-1,-2,-1,-3}, 9 {-1,5,-3,-2,-4}, 10 {-2,-3,5,-2,-2}, 11 {-1,-2,-2,5,-1}, 12 {-3,-4,-2,-1,0} }; 13 char str1[105]; 14 char str2[105]; 15 int f[256]; 16 bool vis[105][105]; 17 int ans[105][105]; 18 int DFS ( int x , int y ) 19 { 20 21 int i ; 22 int xy=0; 23 if ( x == -1 ) 24 { 25 for ( i = 0 ; i <= y ; i ++ ) 26 xy += map[str2[i]][4] ; 27 return xy ; 28 } 29 if ( y == -1 ) 30 { 31 for ( i = 0 ; i <= x ; i ++ ) 32 xy += map[str1[i]][4] ; 33 return xy ; 34 } 35 if ( vis[x][y] ) 36 return ans[x][y] ; 37 vis[x][y]=true; 38 ans[x][y] = max ( DFS ( x - 1 , y - 1 ) + map[str1[x]][str2[y]] , max ( DFS(x,y-1)+map[4][str2[y]] , DFS(x-1,y)+map[str1[x]][4] )) ; 39 return ans[x][y] ; 40 } 41 int main() 42 { 43 f[‘A‘]=0; 44 f[‘C‘]=1; 45 f[‘-‘]=4; 46 f[‘G‘]=2; 47 f[‘T‘]=3; 48 int t ; 49 cin >> t ; 50 while ( t -- ) 51 { 52 int i , j ; 53 int len1 , len2 ; 54 cin >> len1 >> str1 ; 55 for ( i = 0 ; i < len1 ; i ++ ) 56 str1[i]=f[str1[i]]; 57 58 cin >> len2 >> str2 ; 59 for ( i = 0 ; i < len2 ; i ++ ) 60 str2[i]=f[str2[i]]; 61 memset ( vis , 0 , sizeof ( vis ) ) ; 62 cout << DFS(len1-1,len2-1) << endl ; 63 } 64 return 0; 65 }
1 #include<cstdio> 2 #include<cstdlib> 3 #include<iostream> 4 #include<algorithm> 5 6 using namespace std; 7 /*dp,poj1080*/ 8 9 int dp[105][105];//动态规划数据存放 10 int map[105][105];//用来存放原始数据 11 12 void map_init() 13 { 14 map[‘A‘][‘A‘]=map[‘C‘][‘C‘]=map[‘G‘][‘G‘]=map[‘T‘][‘T‘]=5; 15 map[‘A‘][‘C‘]=map[‘C‘][‘A‘]=map[‘A‘][‘T‘]=map[‘T‘][‘A‘]=map[‘T‘][‘ ‘]=map[‘ ‘][‘T‘]=-1; 16 map[‘A‘][‘G‘]=map[‘G‘][‘A‘]=map[‘C‘][‘T‘]=map[‘T‘][‘C‘]=map[‘G‘][‘T‘]=map[‘T‘][‘G‘]=map[‘G‘][‘ ‘]=map[‘ ‘][‘G‘]=-2; 17 map[‘A‘][‘ ‘]=map[‘ ‘][‘A‘]=map[‘G‘][‘C‘]=map[‘C‘][‘G‘]=-3; 18 map[‘C‘][‘ ‘]=map[‘ ‘][‘C‘]=-4; 19 } 20 21 int max_X3(int a,int b,int c) 22 { 23 if(a>b) 24 { 25 if(a>c) 26 return a; 27 else 28 return c; 29 } 30 else 31 { 32 if(b>c) 33 return b; 34 else 35 return c; 36 } 37 } 38 39 int main() 40 { 41 int y;//全局次数 42 int i,j;//循环变量 43 int a,b;//用户输入 44 char str1[105]; 45 char str2[105]; 46 47 //初始化 48 map_init(); 49 50 cin>>y; 51 while (y--) 52 { 53 scanf("%d %s",&a,str1); 54 scanf("%d %s",&b,str2); 55 56 //初始化第一行第一列 57 dp[0][0]=0; 58 for (i = 0; i < a; i++) 59 dp[0][i+1] = dp[0][i] + map[str1[i]][‘ ‘]; 60 61 for (j = 0; j < b; j++) 62 dp[j+1][0] = dp[j][0] + map[str2[j]][‘ ‘]; 63 64 for (i = 1; i <= a; i++) 65 { 66 for (j = 1; j <= b; j++) 67 { 68 dp[j][i] = max_X3(dp[j-1][i-1]+map[str2[j-1]][str1[i-1]], 69 dp[j-1][i]+map[str2[j-1]][‘ ‘], 70 dp[j][i-1]+map[str1[i-1]][‘ ‘]); 71 } 72 } 73 74 cout<<dp[b][a]<<endl; 75 } 76 return 0; 77 }
poj 1080 Human Gene Functions(lcs,较难)
标签:dash 测试 sample sim rest plain miss tag leo
原文地址:http://www.cnblogs.com/bofengyu/p/6740593.html