[POJ 1080]Human Gene Functions(动态规划)
来源:互联网 发布:北京seo外包服务 编辑:程序博客网 时间:2024/05/24 05:38
题目:http://poj.org/problem?id=1080
题目大意:给出人类的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 110using 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;}
0 0
- poj 1080 Human Gene Functions动态规划
- POJ 1080 Human Gene Functions(动态规划)
- [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(动态规划:经典DP)
- hdu poj 1080 Human Gene Functions LCS 动态规划
- hdu 1080 Human Gene Functions 动态规划
- POJ 1080 Human Gene Functions
- POJ 1080 Human Gene Functions
- POJ 1080 Human Gene Functions
- poj 1080 Human Gene Functions
- POJ 1080 Human Gene Functions
- Poj 1080 Human Gene Functions
- poj 1080 Human Gene Functions
- poj 1080 Human Gene Functions
- POJ 1080 Human Gene Functions
- 浅析SAX,DOM,JAXP,JDOM与DOM4J之间的关系
- 菜鸟版JAVA设计模式—从买房子看代理模式
- mysql查看表结构和表创建语命令
- tail
- 第一个Android的应用程序目录结构详说
- [POJ 1080]Human Gene Functions(动态规划)
- ormlite介绍一
- 无限级分类--获取子分类
- 高效率三大法则总结
- EL和JSTL
- Subsets II [leetcode] 从获取子集的递归和循环方法说起,解决重复子集的问题
- 清空 DB2 表中数据的几种方法
- ACM 遗憾题!!
- android联系人中英文混合排序