洛谷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序列由无数种碱基排列而成(地球 ...
随机推荐
- 赵海军获任中芯国际CEO 邱慈云留任副董事长、非执行董事(年薪40万美元+300万股票的认购权)
集微网消息,中芯国际今日宣布,由赵海军博士接替邱慈云博士担任中芯国际首席执行官,邱慈云博士将留任副董事长.非执行董事,并于2017年6月30日前担任公司全职顾问,于当日生效.邱博士将与赵博士紧密合作, ...
- delphi 获取当前进程的cpu占用率
type TProcessCpuUsage = record private FLastUsed, FLastTime: Int64; FCpuCount:Integer; publ ...
- C#调用Delphi Dll返回字符串的示例(使用Move才能拷贝字符串)
//----------------------Delphi------------------- procedure GetSqlData(ASource: PChar; ADest: PChar; ...
- cStor云存储、cProc云处理、cVideo云视频、cTrans云传输,云创个人网盘
http://www.cstor.cn,微信公众号:cstor_cn. 云创大数据是国际上云计算产品线齐全的企业之一,针对爆炸式增长的大数据需求,研发了自主知识产权的cStor云存储.cPr ...
- 【聚沙成塔系列】之《UML九种图-包图、类图》
一.包 (一)相关概念: 1.包: 一个包=一层=一个命名空间=一个文件夹 2.包的命名: 简单名:王老二 路径名:中国.河北省.廊坊市.廊坊师范学院.信息技术提高班.九期班.王老 3.可见性: +公 ...
- 使用pjax实现类似github无刷新更改页面url
pjax=pushState+ajax,相信用过github的同学都知道,github部分页面采用了pjax这个项目来实现ajax无刷新加载的同时改变页面url.一起来学习一下这个插件吧. 我们都知道 ...
- 阿里云主机CentOS7设置远程连接MySQL数据库
有一个困扰了我好久的问题,今天终于解决了. 看网上的答案只有一部分.今天把完整的发篇博客纪念一下下. 首先,连接阿里云主机并登录数据库, 1.添加一个Host mysql>select User ...
- 使用vscode调试Nodejs
之前想用vscode调试nodejs,总是不成功,也走很多弯路,现在记录下来. 首先新建一个文件夹,用vscode打开这个文件夹, 用vscode自带的终端执行npm init,输入名称,其他的可不输 ...
- 后端session的获取
Request的获取 第一种方法 @Autowired private HttpServletRequest request; 第二种方法 RequestAttributes requestAttri ...
- SSM(三)Mybatis动态SQL
1.查询语句,where: <resultMap id="xxx" type="xx..Student" autoMapping="false& ...