【洛谷P1140 相似基因】动态规划】的更多相关文章

洛谷P1140 相似基因 题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了44种核苷酸,简记作A,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类基因工作组的任务中,生物学家研究的是:两个基因的相似程度.因为这个研究对疾病的治疗有着非同寻常的作用. 题目描述 两个基因的相似度的计算方法如下: 对于两个已知基因,例如AGTGATGAGTGATG和GTTAGGTTAG,将它们的碱基互相对应.当然,中间可以加入一些空碱基-,例如: 这样,…
分析 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]直接推得 2.a[i]位匹配'-' f[i][j]=Max(f[i-1][j]+v[4][a]); 3.b[j]位匹配'-' f[i][j]=Max(f) f[i][j]=f[i-1][j-1]+v[a[i]][b[j]] AC代码 // luogu-judger-enable-o2 #include…
传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 参考资料: [1]:https://www.cnblogs.com/real-l/p/9712029.html [2]:https://www.luogu.org/problemnew/solution/P1140 题解: 方法一:枚举所有可能(记忆型DP) 相关变量解释: m,n...................................................分别…
题目:https://www.luogu.org/problemnew/show/P1140 题意: 给定两串基因串(只包含ATCG),在其中插入任意个‘-’使得他们匹配.(所以一共是5种字符) 这5种字符两两之间有一个匹配数值,要求使这两个字符串的匹配值之和最大. 思路: dp[i][j]表示匹配了s1中前i个字符和s2中前j个字符的最大匹配值. 完成s1[i]与s2[j]的匹配只有三种可能. 1.s1[i]之前已经匹配好,s2[j]配‘-’.即dp[i][j] = dp[i][j-1]+sc…
题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了444种核苷酸,简记作A,C,G,TA,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类基因工作组的任务中,生物学家研究的是:两个基因的相似程度.因为这个研究对疾病的治疗有着非同寻常的作用. 题目描述 两个基因的相似度的计算方法如下: 对于两个已知基因,例如AGTGATGAGTGATGAGTGATG和GTTAGGTTAGGTTAG,将它们的碱基互相对应.当然,中间可以加入一些空碱基-,…
题目: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:换行效果更佳.…
每日一题 day23 打卡 Analysis dp[i][j]表示序列A中前i个与序列B中前j个匹配的相似度最大值 所以,dp方程很容易想到: 1.让a[i]与b[j]匹配 2.让a[i]与B序列中一个空位匹配 3.让b[j]与A序列中一个空位匹配 dp[i][j]=max(dp[i][j],dp[i-1][j-1]+form[a[i]][b[j]],dp[i-1][j]+form[a[i]][5],dp[i][j-1]+form[5][b[j]]); 对于初始化,就是分别让每个a[i]和每个b…
题意 : 题目链接 分析 :  可以观察到给出的配对代价表中对角线部分是正数 其余的都是负数,也就是说让相同字母的匹配的越多越好 即找出 LCS 但是这里 DP 的过程需要记录一下代价 有关 LCS 的一篇博客 ==> Click here 如果不是计算长度而是计算配对的价值,那么初始化的时候 记得将每一个串的字母作为结尾与空串配对的价值初始化一下 即 dp[i][0] 与 dp[0][i] #include<bits/stdc++.h> using namespace std; con…
这道题我一直按照往常的思路想 f[i]为前i个任务的最大空暇时间 然后想不出来怎么做-- 后来看了题解 发现这里设的状态是时间,不是任务 自己思维还是太局限了,题做得太少. 很多网上题解都反着做,那么麻烦干嘛 设f[i]为前i时间内的最大空暇时间. 这里是更新后来的状态,和以前不一样. 如果i为某个任务的开始时间,则 f[i+t-1] = max(f[i+t-1], f[i]) 也就是继承过去,取max 如果不是的话 f[i] = max(f[i], f[i-1] + 1) 加上获得的空暇时间…
题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了44种核苷酸,简记作A,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类基因工作组的任务中,生物学家研究的是:两个基因的相似程度.因为这个研究对疾病的治疗有着非同寻常的作用. 题目描述 两个基因的相似度的计算方法如下: 对于两个已知基因,例如AGTGATGAGTGATG和GTTAGGTTAG,将它们的碱基互相对应.当然,中间可以加入一些空碱基-,例如: 这样,两个基因之间的相似度就可以…