洛谷 P1140 相似基因 ( 线性DP || 类LCS )
题意 : 题目链接
分析 :
可以观察到给出的配对代价表中对角线部分是正数
其余的都是负数,也就是说让相同字母的匹配的越多越好
即找出 LCS 但是这里 DP 的过程需要记录一下代价
有关 LCS 的一篇博客 ==> Click here
如果不是计算长度而是计算配对的价值,那么初始化的时候
记得将每一个串的字母作为结尾与空串配对的价值初始化一下
即 dp[i][0] 与 dp[0][i]
#include<bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
;
][] = {
{, -, -, -, -},
{-, , -, -, -},
{-, -, , -, -},
{-, -, -, , -},
{-, -, -, -, -INF}
};
char str1[maxn], str2[maxn];
map<char, int> mp;
int dp[maxn][maxn];
int main(void)
{
mp[,
mp[,
mp[,
mp[,
mp[;
memset(dp, -INF, sizeof(dp));
int N, M;
scanf("%d", &N);
; i<=N; i++) scanf(" %c", &str1[i]);
scanf("%d", &M);
; i<=M; i++) scanf(" %c", &str2[i]);
dp[][] = ;
; i<=N; i++) dp[i][] = dp[i-][] + cost[mp[str1[i]]][];
; i<=M; i++) dp[][i] = dp[][i-] + cost[][mp[str2[i]]];
/*
对于上面这两个 for 循环的初始化,实际上就是对每一个串到 i 为结尾与一个空串
做匹配的结果,即到 i 为止,整个串与空碱基做匹配的代价,这个初始化是有必要的
举个例子
1 A
3 TGC
没有这个初始化的话 错误答案就是 -7 对应如下情况
---
TGC
实际最优的情况是 -4 对应如下情况
--A
TGC
因为没有这个初始化,dp[1][j] 的情况不能从 dp[i-1][j-1] 转移而来
即让第一个串的第 1 字符与当前第二个串的第 j 个字符做匹配的代价
对于LCS这种DP的变体,记得这个初始化!
*/
; i<=N; i++){
; j<=M; j++){
dp[i][j] = max(dp[i][j], dp[i-][j-] + cost[mp[str1[i]]][mp[str2[j]]]);
dp[i][j] = max(dp[i][j], dp[i-][j] + cost[mp[str1[i]]][]);
dp[i][j] = max(dp[i][j], dp[i][j-] + cost[][mp[str2[j]]]);
}
}
// for(int i=1; i<=N; i++){
// for(int j=1; j<=M; j++){
// printf("%d ", dp[i][j]);
// }puts("");
// }
return !printf("%d\n", dp[N][M]);;
}
洛谷 P1140 相似基因 ( 线性DP || 类LCS )的更多相关文章
- 洛谷P1140 相似基因 (DP)
洛谷P1140 相似基因 题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了44种核苷酸,简记作A,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. ...
- 洛谷P1140 相似基因(线性DP)
题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了444种核苷酸,简记作A,C,G,TA,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类 ...
- 2018.08.16 洛谷P2029 跳舞(线性dp)
传送门 简单的线性dp" role="presentation" style="position: relative;">dpdp. 直接推一推 ...
- 洛谷P1140 相似基因【线性dp】
题目:https://www.luogu.org/problemnew/show/P1140 题意: 给定两串基因串(只包含ATCG),在其中插入任意个‘-’使得他们匹配.(所以一共是5种字符) 这5 ...
- 洛谷 P1140 相似基因(DP)
传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 参考资料: [1]:https://www.cnblogs.com/real-l/p/9 ...
- 2018.11.04 洛谷P2679 子串(线性dp)
传送门 为什么前几年的noipnoipnoip总是出这种送分题啊? 这个直接线性dpdpdp不就完了吗? f[i][j][k][0/1]f[i][j][k][0/1]f[i][j][k][0/1]表示 ...
- 洛谷P1140 相似基因
题目:https://www.luogu.org/problemnew/show/P1140 分析: 本题一看就知道是一道动归,其实和字串距离非常的像,只不过多了题目规定的匹配相似度罢了. 匹配的相似 ...
- 洛谷 P1140 相似基因 题解
每日一题 day23 打卡 Analysis dp[i][j]表示序列A中前i个与序列B中前j个匹配的相似度最大值 所以,dp方程很容易想到: 1.让a[i]与b[j]匹配 2.让a[i]与B序列中一 ...
- 洛谷P1052 过河【线性dp】【离散化】
题目:https://www.luogu.org/problemnew/show/P1052 题意: 青蛙要从0跳到超过$l$的地方,每一次可以跳$s$到$t$之间的任意数. 在河中有m个石头,要求在 ...
随机推荐
- xmake从入门到精通9:交叉编译详解
xmake是一个基于Lua的轻量级现代化c/c 的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验. 除了win, linux, macOS平台,以及an ...
- No repository found containing: …错误解决
由于我安装的是Eclipse ForJava Development,无JAVA EE,查找资料后发现可以自己在已有软件的基础上配置,总结如下: >>>>>点开之后,找到 ...
- XCode8.3真机调试设置
本文使用XCode8.3.3 首先XCode->Preferncs,进入下面的界面 点击左下角“+”号,并输入账号,然后点击Manage Certificates,左下角添加IOS develo ...
- PERCONA-TOOLKIT 安装 使用
1.基于MySQL主从环境 可以参考https://www.cnblogs.com/xianglei_/p/12068241.html 上传rpm包 并安装 1 2 cd /usr/local/src ...
- HDU 4585 Shaolin (STL map)
Shaolin Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Sub ...
- spring boot-12.Servlet 容器
1.spring boot 默认使用的是嵌入式的Servlet容器,spring-boot-starter-web 依赖了spring-boot-satrter-tomcat就是引入了嵌入式的tomc ...
- 小记---------网页采集之selenium
1.元素定位 ID定位元素: findElement(By.id(“”)); 通过元素的名称定位元素: findElement(By.name(“”)); 通过元素的html中的位置定位元素 ...
- 2017.10.21 C组比赛总结
今天考得不太好,只拿了100+0+0+30=130分... [GDKOI训练]音乐节拍 考场AC了! 其实就是大水一道! 思路:二分查找 每次输入后,输出该时刻所在的区间的编号就好了. 总体难度:★★ ...
- js中this.index使用
上面圈出的那句没有执行,因为this.index 是undefined,(也不能直接使用i取代this.index,原因是i不是变化的值,使用alert打印输出的i值始终为3) 解决方式:在for语句 ...
- Kibana多用户创建及角色权限控制
1 介绍 ELK日志管理属于基础设施平台,接入多个应用系统是正常现象,如果接入多个系统的索引文件没有进行权限划分,那么很大程度会出现索引文件误处理现象,为了避免这种情况发生,多用户及权限设置必不可少. ...