题目:http://poj.org/problem?id=1080

题意:比较两个基因序列,测定它们的相似度,将两个基因排成直线,如果需要的话插入空格,使基因的长度相等,然后根据那个表格计算出相似度。

题解:

考虑f[i][j]:

①    s1取第i个,s2取第j个, f[i][j] = f[i-1][j-1]+value[m(s1[i])][m(s2[j])];

②    s1取第i个,s2用’-’, f[i][j] = f[i][j-1]+value[m(s1[i])][m(‘-’)];

③    s1用’-’,s2取第j个, f[i][j] = f[i-1][j]+value[m(‘-’)][m(s2[j])];

f[i][j] 为三者中最大者

考虑边界条件,即i或j为0的情况:

①                    当i=j=0时,根据f[1][1] = f[0][0]+value[m(s1[i])][m(s2[j])],有f[0][0] = 0;

②                    当i=0时,用f[0][j] = f[0][j-1]+ value[m(‘-’)][m(s2[j])]计算

③                    当j=0时,用f[i][0] = f[i-1][0]+ value[m(s1[i])][m(‘-’)]计算

 #include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; int mmax(int a,int b,int c)
{
if(a>=b&&a>=c)
return a;
if(b>=a&&b>=c)
return b;
if(c>=a&&c>=b)
return c;
}
int f[][]={,-,-,-,-,
-,,-,-,-,
-,-,,-,-,
-,-,-,,-,
-,-,-,-,
}; int tran(char ch)
{
switch(ch)
{
case 'A':return ; break;
case 'C':return ; break;
case 'G':return ; break;
case 'T':return ; break;
case '-':return ;
}
}
int d[][];
int main()
{
int t,i,j,m,n;
char a[],b[];
cin>>t;
while(t--)
{
memset(d,,sizeof(d));
cin>>m; getchar();
cin>>a;
cin>>n; getchar();
cin>>b;
d[][]=;
for(j=; j<=n; j++)
d[][j]=f[tran('-')][tran(b[j-])]+d[][j-];//这里刚开始求成了最大的,其实应该是每一个的- 与
//每一个的字符串匹配后的值, 而后面循环里的每一个d【i】[j]实际都有相同的字符,不足的是- 补全的。 for(i=; i<=m; i++)
d[i][]=f[tran(a[i-])][tran('-')]+d[i-][];
for(i=; i<=m; i++)
for(j=; j<=n; j++)
{
d[i][j]=mmax(f[tran(a[i-])][tran(b[j-])]+d[i-][j-],f[tran('-')][tran(b[j-])]+d[i][j-],
f[tran(a[i-])][tran('-')]+d[i-][j]);// 因为输入的原因,d 和 a. b 相差 一
}
cout<<d[m][n]<<endl;
}
return ;
}

poj 1080 Human Gene Functions(dp)的更多相关文章

  1. poj 1080 ——Human Gene Functions——————【最长公共子序列变型题】

    Human Gene Functions Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17805   Accepted:  ...

  2. poj 1080 Human Gene Functions(lcs,较难)

    Human Gene Functions Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19573   Accepted:  ...

  3. POJ 1080 Human Gene Functions -- 动态规划(最长公共子序列)

    题目地址:http://poj.org/problem?id=1080 Description It is well known that a human gene can be considered ...

  4. dp poj 1080 Human Gene Functions

    题目链接: http://poj.org/problem?id=1080 题目大意: 给两个由A.C.T.G四个字符组成的字符串,可以在两串中加入-,使得两串长度相等. 每两个字符匹配时都有个值,求怎 ...

  5. POJ 1080 Human Gene Functions 【dp】

    题目大意:每次给出两个碱基序列(包含ATGC的两个字符串),其中每一个碱基与另一串中碱基如果配对或者与空串对应会有一个分数(可能为负),找出一种方式使得两个序列配对的分数最大 思路:字符串动态规划的经 ...

  6. POJ 1080 Human Gene Functions

    题意:给两个DNA序列,在这两个DNA序列中插入若干个'-',使两段序列长度相等,对应位置的两个符号的得分规则给出,求最高得分. 解法:dp.dp[i][j]表示第一个字符串s1的前i个字符和第二个字 ...

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

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

  8. poj1080 - Human Gene Functions (dp)

    题面 It is well known that a human gene can be considered as a sequence, consisting of four nucleotide ...

  9. hdu 1080 Human Gene Functions(DP)

    题意: 人类基因由A.C.G.T组成. 有一张5*5的基因表.每格有一个值,叫相似度.例:A-C:-3.意思是如果A和C配对, 则它俩的相似度是-3[P.S.:-和-没有相似度,即-和-不能配对] 现 ...

随机推荐

  1. Javascript倒计时页面跳转

    在js中实现页面定时跳转我们要使用setInterval或setTimeOut函数,还可以使用页面的meta实现. 例1: <script type="text/javascript& ...

  2. javascript实现URL不缓存的方法

    <script> document.write("<s"+"cript type='text/javascript' src='/js/test.js? ...

  3. cxgrid GridMode 等于 True 时的一些问题。

    When using grid mode, the data controller loads a fixed number of dataset records into memory. The n ...

  4. unity 3d-Easy Touch 3教程 转

    Easy Touch 教程 转自:http://www.unitymanual.com/thread-31332-1-1.html 1.import “Easy Touch 3”的资源包 2.创建人物 ...

  5. iOS sqlite数据库实现(转)

    转载自:http://www.cnblogs.com/macroxu-1982/archive/2012/10/01/2709960.html 1 实现过程添加libsqlite3组件 选择项目后,在 ...

  6. 【学习总结】UIGestureRecognizer(手势识别器)

    基本知识点 : -> IOS 3.2之后 , 苹果推出了手势识别功能 ( Gesture Recognizer ) 在触摸事件处理方面 , 简化开发难度. -> UIGesture Rec ...

  7. 【BZOJ 1009】 [HNOI2008]GT考试

    Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0< ...

  8. c# Oracle 远程连接方式 plsql 连接oracle 11g 64位

    1.本地连接字符串:   string connect = "Data Source=orcl;user=XXX;password=XXX;Persist Security Info=Tru ...

  9. UITableView实现格瓦拉飞天投票模块-b

    格瓦拉目前来说动画效果确实做的还比较好,虽然不是说很炫但做到精致,这次就模仿了它投票的模块.其实想到要实现它还是有很多方法,不过这次我还是采用了苹果自带控件UITableView简简单单来实现它,再次 ...

  10. swift基础--字符串

    (1)遍历 (2)长度 (3)拼接 (4)插值 (5)大小写 (6)trim (7)split ……等等 var a = "你好" var b = String() a.isEmp ...