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

题目传送门

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

两个序列配对上的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. [Bzoj2120]数颜色 (非正解 )(莫队)

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 6286  Solved: 2489[Submit][Status][Discuss] ...

  2. 标准格式包含: 私有属性 无参构造 有参构造 setter 和getter 需求中的方法 需求一: 员工类Employee 属性:姓名name,工号id,工资salary 行为:显示所有成员信息的方法show() 需求二: 动物类Animal 属性:姓名name,年龄age 行为:吃饭

      // 员工类 public class Employee { private String name; private int id; private double salary; public ...

  3. HDTVI,HDCVI

    HDTVI是海康的同轴高清标准,HDCVI是大华的同轴高清标准,二者互相不兼容.

  4. Win7 SP1 安装SQL Server 2012时提示“此计算机上的操作系统不符合 SQL Server 2012的最低要求”

  5. HadoopMapReduce运行机制

    1.map方法读取一个文件的一行记录进行分析,  输入:LongWritable(当前读取的文件位置), Text(内容) 2.map将读取到的信息进行分类,输入Context  (键值对)  ;作为 ...

  6. smartfoxserver扩展里面过滤聊天的不合法字符

    http://blog.csdn.net/yc7369/article/details/35567105 近期做手游客户要求加上一个聊天功能.事实上嘛,个人认为这个聊天功能比較鸡肋,这部分差点儿已经有 ...

  7. Python爬虫开发【第1篇】【多线程爬虫及案例】

    糗事百科爬虫实例: 地址:http://www.qiushibaike.com/8hr/page/1 需求: 使用requests获取页面信息,用XPath / re 做数据提取 获取每个帖子里的用户 ...

  8. Hackrank Candies DP

    题目链接:传送门 题意: n个学生站一行,老师给每个学生发至少一个糖 相邻学生,a[i] > a[i-1] 的话,那么右边学生的糖一定要发得比左边学生的糖多 问你满足条件这个老师总共最少的发多少 ...

  9. 正向代理tinyproxy使用总结

    使用tinyproxy的问题背景: 其实以前代理一直用的是apache,后来,那次有个任务要给ios的推送设置代理,任务很紧急,可是apache报错. 原因如下:APNS发送通知的端口2195,但是A ...

  10. linux losetup

    1 losetup命令的通用格式 losetup loopdev file loopdev可以看出时一个仿真设备,它本身是没有存储空间的,这个命令的作用就是将file作为它的存储空间. 一旦连接成功, ...