最近博客更不起来...然后又(照例)犯鼻炎了唉难受。

题目传送门

我们首先可以预处理碱基间的权值表。然后讲读入的碱基转化为数字,就变成了“数字匹配使权值最大”的问题。我们显然可以用动态规划解决。

两个序列配对上的dp状态设计相似,以前做过一道编辑距离也是类似配对的问题。

设f[i][j]表示第一个基因当前位置到了第i个碱基,第二个基因当前位置到了第j个碱基所能得到的最大相似度。

转移:lena*lenb 而且和状态也没有什么地方可以优化了。

决策:我们可以在每一次转移的时候有3种决策:

                      A串留空/B串留空/AB恰好匹配

预处理:当一个串与另一个(完全)空的串匹配时显然只有一种情况,所有状态开始由他转移而来。

     for(int i=;i<=lenb;i++) f[][i]=f[][i-]+w[b[i]][];
for(int i=;i<=lena;i++) f[i][]=f[i-][]+w[a[i]][];

然鹅...在这被坑了,由于有负数的权值,还要再赋一个负无穷的初值,以及f[0][0]=0!!!

Code

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; int lena,lenb;
int w[][];
int a[],b[],f[][];
char A[],B[]; void init()
{
for(int i=;i<=;i++) w[i][i]=;
w[][]=w[][]=w[][]=w[][]=w[][]=w[][]=-;
w[][]=w[][]=w[][]=w[][]=-;
w[][]=w[][]=w[][]=w[][]=w[][]=w[][]=w[][]=w[][]=-;
w[][]=w[][]=-;
}
int main()
{
init();
/*for(int i=1;i<=5;i++)
{
for(int j=1;j<=5;j++)
printf("%d ",w[i][j]);
printf("\n");
}*/ scanf("%d",&lena);
scanf("%s",A+);
for(int i=;i<=lena;i++)
{
if(A[i]=='A') a[i]=;
if(A[i]=='C') a[i]=;
if(A[i]=='G') a[i]=;
if(A[i]=='T') a[i]=;
}
scanf("%d",&lenb);
scanf("%s",B+);
for(int i=;i<=lenb;i++)
{
if(B[i]=='A') b[i]=;
if(B[i]=='C') b[i]=;
if(B[i]=='G') b[i]=;
if(B[i]=='T') b[i]=;
}
memset(f,,sizeof(f));
f[][]=;
for(int i=;i<=lenb;i++) f[][i]=f[][i-]+w[b[i]][];
/* for(int i=1;i<=lenb;i++)
printf("%d ",f[0][i]);*/
for(int i=;i<=lena;i++) f[i][]=f[i-][]+w[a[i]][];
for(int i=;i<=lena;i++)
for(int j=;j<=lenb;j++)
{
f[i][j]=max(f[i][j],f[i-][j]+w[a[i]][]);
f[i][j]=max(f[i][j],f[i][j-]+w[b[j]][]);
f[i][j]=max(f[i][j],f[i-][j-]+w[a[i]][b[j]]);
}
printf("%d",f[lena][lenb]);
return ;
}

Luogu P1140 相似基因 【dp】By cellur925的更多相关文章

  1. 洛谷P1140 相似基因 (DP)

    洛谷P1140 相似基因 题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了44种核苷酸,简记作A,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. ...

  2. 洛谷 P1140 相似基因(DP)

    传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 参考资料: [1]:https://www.cnblogs.com/real-l/p/9 ...

  3. P1140 相似基因 (dp)

    题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了44种核苷酸,简记作A,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类基因工作组的任务 ...

  4. luogu P1140 相似基因

    题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了4种核苷酸,简记作A,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类基因工作组的任务中,生物学家研究 ...

  5. 洛谷P1140 相似基因【线性dp】

    题目:https://www.luogu.org/problemnew/show/P1140 题意: 给定两串基因串(只包含ATCG),在其中插入任意个‘-’使得他们匹配.(所以一共是5种字符) 这5 ...

  6. 洛谷P1140 相似基因(线性DP)

    题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了444种核苷酸,简记作A,C,G,TA,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类 ...

  7. P1140 相似基因 这个和之前有一个题目特别像 dp

    题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了444种核苷酸,简记作A,C,G,TA,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类 ...

  8. Luogu P4933 大师【dp】By cellur925

    题目传送门 题目大意:给你一个序列,求子序列为等差数列的子序列个数.序列长度$n<=2000$,最高的塔高$v<=20000$. 这种计数类的题,大概就是dp的套路了⑧.开始设计的是一个错 ...

  9. 洛谷 P1140 相似基因 ( 线性DP || 类LCS )

    题意 : 题目链接 分析 :  可以观察到给出的配对代价表中对角线部分是正数 其余的都是负数,也就是说让相同字母的匹配的越多越好 即找出 LCS 但是这里 DP 的过程需要记录一下代价 有关 LCS ...

随机推荐

  1. Hive安装中遇到过的坑

    实现说明每一个用户的环境都有细微的不一致,所以这里只是个人经过这些坑的处理,但是不意味着所有处理都是这样的操作,仅作为参考. 第一个坑 数据库安装,数据库最好装在Linux上,一直出了很多错,这里有一 ...

  2. Visual studio 2017 中的Javascript智能提示与调试

    1.智能提示 对于JS文件中的API,你若需要让那个JS文件中的方法能够在你写的那个JS文件中能够智能显示的话,直接把它拉进你的JS文件中就好了. 举个例子:你想 在你正在写的a.js文件中引用b.j ...

  3. SecureCRT5 中文乱码

    SecureCRT5 中文乱码 secureCRT7已经不用这样设置了: 学习了:http://www.iitshare.com/securecrt-chinese-garbled-solution. ...

  4. centos Crontab

    minute   hour   day   month   week   command     顺序:分 时 日 月 周 命令 第1列分钟1-59第2列小时1-23(0表示子夜)第3列日1-31第4 ...

  5. Android中的图片查看器

    本案例,使用Eclipse来开发Android2.1版本号的图片查看器. 1)首先,打开Eclipse.新建一个Android2.1版本号的项目ShowTu,打开res/values中文件夹下的str ...

  6. 【PostgreSQL】PostgreSQL操作-psql基本命令

    在阅读的过程中有不论什么问题,欢迎一起交流 邮箱:1494713801@qq.com    QQ:1494713801 一.建立数据库连接 ---------------- 接入PostgreSQL数 ...

  7. java克隆对象clone()的使用方法和作用

    转自:997.html">http://www.okrs.cn/blog/news/?997.html 内容摘要 若需改动一个对象,同一时候不想改变调用者的对象.就要制作该对象的一个本 ...

  8. LoadRunner 中调用c函数生成随机字符串

    Action() { int itera_num,rand_num,i; ]=""; char StrTable[]="abcdefghijklmnopqrstuvwxy ...

  9. Linux下通过find命令进行rm文件删除的小技巧

       我们常常会通过find命令进行批量操作.如:批量删除旧文件.批量改动.基于时间的文件统计.基于文件大小的文件统计等.在这些操作其中,因为rm删除操作会导致文件夹结构变化,假设要通过find结合r ...

  10. A + B Problem II(杭电1002)

    /*A + B Problem II Problem Description I have a very simple problem for you. Given two integers A an ...