洛谷P1140 相似基因
题目:https://www.luogu.org/problemnew/show/P1140
分析:
本题一看就知道是一道动归,其实和字串距离非常的像,只不过多了题目规定的匹配相似度罢了。
匹配的相似度我们之间用一个二维数组读入即可
int shuzu[6][6]={{0,0,0,0,0,0},{0,5,-1,-2,-1,-3},{0,-1,5,-3,-2,-4},{0,-2,-3,5,-2,-2},{0,-1,-2,-2,5,-1},{0,-3,-4,-2,-1,0}};
PS:换行效果更佳。
然后要把字符串转化成刚才数组中的下标,便于读写
int start(char c)
{
if(c=='A')return 1;
if(c=='C')return 2;
if(c=='G')return 3;
if(c=='T')return 4;
}
然后直接在主函数中调用即可
之后就是调用问题
for(int i=0;i<n;i++)
{
a[i+1]=start(s1[i]);
}
for(int j=0;j<m;j++)
{
b[j+1]=start(s2[j]);
}
其中s1,s2均为读入的字符串,我们把它们分别逐字符转化放入a,b数组。
然后由于有负值出现,我们需要把动归的核心方程初始化为一个极小的负数
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
f[i][j]=-2147483647;
}
}
然后就是关键的动归核心部分了。
首先,看到数据范围:100
受到启发:二位数组开的起,再加上字串距离的引导,我们很容易想到f[i][j]f[i][j]f[i][j]可以表示第一个字符串的前i个字符与第二个字符串的前j个字符匹配的最大值。
状态想出来,那么方程如何转移呢?
根据可以加入空碱基,我们能想到
f[i][j]=max(f[i][j],f[i−1][j]+shuzu[a[i]][5],f[i][j−1]+shuzu[b[j]][5],f[i−1][j−1]+shuzu[a[i]][b[i]]f[i][j]=max(f[i][j],f[i-1][j]+shuzu[a[i]][5],f[i][j-1]+shuzu[b[j]][5],f[i-1][j-1]+shuzu[a[i]][b[i]]f[i][j]=max(f[i][j],f[i−1][j]+shuzu[a[i]][5],f[i][j−1]+shuzu[b[j]][5],f[i−1][j−1]+shuzu[a[i]][b[i]]
分别是s1串的最后一个字符对应一个空字符,s2串的最后一个字符对应一个空字符,s1串个s2串的最后一个字符直接对应。
显而易见的,初始化f数组就是
for(int i=1;i<=n;i++)f[i][0]=f[i-1][0]+shuzu[a[i]][5];
for(int i=1;i<=m;i++)f[0][i]=f[0][i-1]+shuzu[b[i]][5];
然后把它们拼凑起来,就完工喽!
完结撒花~
洛谷P1140 相似基因的更多相关文章
- 洛谷P1140 相似基因 (DP)
洛谷P1140 相似基因 题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了44种核苷酸,简记作A,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. ...
- 洛谷 P1140 相似基因(DP)
传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 参考资料: [1]:https://www.cnblogs.com/real-l/p/9 ...
- 洛谷P1140 相似基因【线性dp】
题目:https://www.luogu.org/problemnew/show/P1140 题意: 给定两串基因串(只包含ATCG),在其中插入任意个‘-’使得他们匹配.(所以一共是5种字符) 这5 ...
- 洛谷P1140 相似基因(线性DP)
题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了444种核苷酸,简记作A,C,G,TA,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类 ...
- 洛谷 P1140 相似基因 题解
每日一题 day23 打卡 Analysis dp[i][j]表示序列A中前i个与序列B中前j个匹配的相似度最大值 所以,dp方程很容易想到: 1.让a[i]与b[j]匹配 2.让a[i]与B序列中一 ...
- 洛谷 P1140 相似基因 ( 线性DP || 类LCS )
题意 : 题目链接 分析 : 可以观察到给出的配对代价表中对角线部分是正数 其余的都是负数,也就是说让相同字母的匹配的越多越好 即找出 LCS 但是这里 DP 的过程需要记录一下代价 有关 LCS ...
- 【洛谷P1140 相似基因】动态规划
分析 f[i][j] 表示 1数组的第i位和2数组的第j位匹配的最大值 f[1][1]=-2 f[2][1]=-2+5=3 f[3][1]=-2+5+5=8 三个决策: 1.由f[i-1][j-1]直 ...
- 洛谷P1140 基因匹配 //DP真正意义上的一血
题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了44种核苷酸,简记作A,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类基因工作组的任务 ...
- 【线型DP】【LCS】洛谷P4303 [AHOI2006]基因匹配
P4303 [AHOI2006]基因匹配 标签(空格分隔): 考试题 nt题 LCS优化 [题目] 卡卡昨天晚上做梦梦见他和可可来到了另外一个星球,这个星球上生物的DNA序列由无数种碱基排列而成(地球 ...
随机推荐
- spring.net的简单使用(一)入门
Spring.net是一个非常强大的框架和工具,下面是百度百科对它的介绍. Spring.NET为建立企业级应用提供了一套轻量级的解决方案.通过Spring.NET,我们可以用统一且透明的方式来配置应 ...
- [铁人赛] ASP.NET Core 2 系列- 从头开始
来势汹汹的.NET Core似乎要取代.NET Framework,ASP.NET也随之发布.NET Core版本.虽说名称沿用ASP.NET,但相较于ASP.NET确有许多架构上的差异,可说是除了名 ...
- 我们检测到您的浏览器不兼容传输层安全协议 (TLS) 1.1 或更高版本,此协议在 Internet 上用于确保您通信的安全性。
早上使用.Net WebClient类采集亚马逊数据,返回http 400 Bad Request错误,内容里面有“我们检测到您的浏览器不兼容传输层安全协议 (TLS) 1.1 或更高版本,此协议在 ...
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发
进行本文之前需要在数据库用户表里面增加一条用户数据,直接手动添加即可,未安全考虑密码一定要使用Md5加密后的,这里提供666666的Md5密文为(c831b04de153469d),本文完成登录模块的 ...
- JS数据结构第三篇---双向链表和循环链表之约瑟夫问题
一.双向链表 在上文<JS数据结构第二篇---链表>中描述的是单向链表.单向链表是指每个节点都存有指向下一个节点的地址,双向链表则是在单向链表的基础上,给每个节点增加一个指向上一个节点的地 ...
- SYN591-B型 转速表
SYN591-B型 转速表 光电转速表数显转速表智能转速表使用说明视频链接: http://www.syn029.com/h-pd-249-0_310_44_-1.html 请将此链接复制到浏览 ...
- TCP使用注意事项总结
目录 发送或者接受数据过程中对端可能发生的情况汇总 本端TCP发送数据时对端进程已经崩溃 本端TCP发送数据时对端主机已经崩溃 本端TCP发送数据时对端主机已经关机 某个连接长时间没有数据流动 TCP ...
- Java NIO 学习笔记(四)----文件通道和网络通道
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...
- PATA 1071 Speech Patterns.
#include <bits/stdc++.h> using namespace std; bool check(char c)//检查是否为字母或数字 { if(c>='A'&am ...
- 01-Javascript基础
一. JS介绍 JavaScript是前台语言 JavaScript是前台语言,而不是后台语言. JavaScript运行在用户的终端网页上,而不是服务器上,所以我们称为“前台语言”. JavaScr ...