[POJ 1080]Human Gene Functions(动态规划)
2014-09-26 16:48
393 查看
题目:http://poj.org/problem?id=1080
题目大意:给出人类的DNA的一对序列A,B,每一对Ai,Bi有对应的分值score(Ai,Bi),序列A和B中亦可插入空格'-',求A和B匹配获得的最大分数
思路:联想最长公共子序列!
题目大意:给出人类的DNA的一对序列A,B,每一对Ai,Bi有对应的分值score(Ai,Bi),序列A和B中亦可插入空格'-',求A和B匹配获得的最大分数
思路:联想最长公共子序列!
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <algorithm> #include <map> #define MAXN 110 using namespace std; map<char,int>dictionary; //DNA字母对应的编号 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 f[MAXN][MAXN]; //f[i][j]=s1前i个字母和s2前j个字母匹配获得的最大分数 int max(int a,int b) { if(a>b) return a; return b; } int main() { dictionary['A']=0,dictionary['C']=1,dictionary['G']=2,dictionary['T']=3,dictionary['-']=4; int T; scanf("%d",&T); while(T--) { int len1,len2; char s1[MAXN],s2[MAXN]; memset(f,0,sizeof(f)); scanf("%d%s%d%s",&len1,s1+1,&len2,s2+1); for(int i=1;i<=len1;i++) f[i][0]=score[dictionary[s1[i]]][dictionary['-']]+f[i-1][0]; //DP初始化:f[i][0]=长为i的s1子串和长为i的空'-'字符串匹配获得的分数 for(int i=1;i<=len2;i++) f[0][i]=score[dictionary['-']][dictionary[s2[i]]]+f[0][i-1]; for(int i=1;i<=len1;i++) for(int j=1;j<=len2;j++) { f[i][j]=f[i-1][j-1]+score[dictionary[s1[i]]][dictionary[s2[j]]]; //1:第i、j号字母都用上 f[i][j]=max(f[i][j],f[i-1][j]+score[dictionary[s1[i]]][dictionary['-']]); //2:s1第i号字母前插入空格 f[i][j]=max(f[i][j],f[i][j-1]+score[dictionary['-']][dictionary[s2[j]]]); //3:s2第j号字母前插入空格 } printf("%d\n",f[len1][len2]); } return 0; }
相关文章推荐
- poj 1080 Human Gene Functions(动态规划)
- POJ-1080-Human Gene Functions-LCS变体,动态规划,DP
- 【动态规划】【poj 1080】Human Gene Functions
- 动态规划----Human Gene Functions(POJ 1080)
- POJ 1080 Human Gene Functions(动态规划)
- POJ 1080 Human Gene Functions DP
- poj 1080 Human Gene Functions
- POJ 1080 Human Gene Functions(LCS变形)
- POJ 1080 Human Gene Functions DP
- 【POJ 1080】 Human Gene Functions
- PKU1080--Human Gene Functions(基因相似度,动态规划)
- POJ 1080 Human Gene Functions(求两字符串相似度:LCS变形)
- POJ-1080-Human Gene Functions
- POJ 1080-Human Gene Functions(LCS变形-最大得分)
- POJ---1080-Human Gene Functions
- POJ-1080-Human Gene Functions
- POJ 1080 Human Gene Functions
- POJ 1080-Human Gene Functions(dp)
- POJ-1080- Human Gene Functions-DP-LCS变形
- poj 1080 Human Gene Functions