![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
隔壁王同学啊
BIO
展开
-
Smith-Waterman算法C++实现
哇。生物专业的复习月可不是盖的,十几门的专业课,并且是纯背的。。。。提前一个月开始复习,复习吐了,写个博客调节调节。。本次介绍的局部双序列对比算法,也就是SW算法。基本上的话,只要学了NW算法也就差不多理解了SW算法了。这个算法顾名思义,就是找到最佳的局部片段。注意这个最佳,怎末实现。这个最佳可以翻译为,从所有的比对情况中,截取得分最高的片段。当一个比对情况形成时,也就是这个情况的计分值不...原创 2019-12-20 22:07:15 · 1343 阅读 · 0 评论 -
Neddle-Wunch算法的C++实现
生物信息课要求每人准备一个ppt,介绍生物信息学领域的相关内容。所以我脑海中瞬间浮现了NW算法与遗传算法。正好一个是计算机技术解决生物问题,一个是生物学思想指导的算法。接下来大部分时间用来NW算法的代码了,发现写着还是有点难度的,毕竟这么久没有写代码了。NW算法的核心就是动态规划,结合设定的罚分矩阵,思路挺容易的,就是实现的时候,要记得走过的最优路径,并且最后显示出来。 课上的讲解,效果其实...原创 2019-10-29 19:18:29 · 769 阅读 · 5 评论 -
动态规划之回文串
题目:例如给定一个字符串:“trit",你只可进行插入任何一个字符,问最少插入多少个字符使之变成回文串?例如本个例子只需要再插入一个r即可。思路分析:此题目一开始思索了很久,最后看了题解,才恍然大悟。该题应根据回文串的特性,进行倒着分析。即如果是回文串的话,那么这个串颠倒过来后,应该与原来字符串相等,即他两个的最大公共子序列的长度为该字符串的长度。那么,在原来字符串不是回文串的情况下,...原创 2019-06-04 21:06:07 · 881 阅读 · 0 评论 -
动态规划之删除最少的元素
问题描述给定有 n 个数的 A 序列:A1,A2,A3…An 。对于这个序列,我们想得到一个子序列 Ap1,Ap2⋯Api⋯Apm(1≤p1< p2<⋯pi<⋯< pm≤n),满足 Ap1≥Ap2≥⋯≥Api≤⋯≤Apm 。从 A 序列最少删除多少元素,可以得到我们想要的子序列。输入格式第一行输入一个整数 n,代表 A 序列中数字的个数。第二个输入 n 个整数,...原创 2019-06-01 11:00:08 · 622 阅读 · 0 评论 -
动态规划之编辑距离
给定两个字符串,一个是字符串a,一个是字符串b。可以对字符串b进行增加元素,删除元素,或者将一个字符改成另一个字符,问最少可以进行多少步操作,将字符串b完全变成字符串a。分析:其实编辑距离问题就是序列比对算法。其可以看作是Needle-wunsh算法的简化形式。通过引入打分矩阵进行操作。下面我们进行具体的分析。当a[i-1]==b[j-1]时,我们直接让dp[i][j]=dp[i-1][j...原创 2019-06-12 21:13:01 · 175 阅读 · 0 评论 -
动态规划之跳木桩
蒜头君面前有一排 n 个木桩,木桩的高度分别是h1,h2,h3…hn。蒜头第一步可以跳到任意一个木桩,接下来的每一步蒜头不能往回跳只能往前跳,并且跳下一个木桩的高度 不大于 当前木桩。蒜头君希望能踩到尽量多的木桩,请你帮蒜头计算,最多能踩到多少个木桩。输入格式第一行输入一个整数 n 代表木桩个数。第二行输入 n 个整数h1,h2,h3..hn,分别代表 n 个木桩的高度。(1≤n≤1000...原创 2019-05-28 20:32:10 · 917 阅读 · 0 评论 -
从一维到二维:最大子段和和最大子矩阵和
上几篇博客我们讲到了最大子段和,我们根据动态规划的思想,是可以得到其的递推公式。下面我们先分析关于一维的最大字段和的求解过程:如果给定一个数组 a[n],求其最大的子段。那么,我们会很容易的想到,运用暴力求解的方式,通过二维的遍历。但是其时间复杂度是O(n*n),显然当数据规模很大时,其肯定时tle的。所以应该利用动态规划的思想进行优化,那么优化如何着手呢。我们仍然回归到暴力求解方法中...原创 2019-05-23 20:42:43 · 337 阅读 · 0 评论 -
动态规划之最大非空子段和
题目:有一排n个整数,a1,a2,a3,......(1<=n<=1e6)(1e-9<=ai<=1e9)。求最大的非空字段和。这道题是非空字段和,如果直接利用上一篇博客中讲的最大子段和的代码,其结果是错的。因为当这个数组全为负数时,根据那个代码,求出最后的结果是0,相当于是空子段。本题应设置,ans为足够小的负数,当数组全为负数时,最后的结果就是数组中最大的值,...原创 2019-05-18 19:16:16 · 815 阅读 · 0 评论 -
动态规划之最长公共子序列
最长公共子序列,顾名思义,就是给定两个序列,求出其中长度最长的共有的子序列。如,给定1,2,4,5,6和2,4,5显然2,4,5是最长的共有序列。那么,如何分析此类问题呢?老方法,我们仍要找出前后状态之间的联系。显然,这是给定了两个序列,那么肯定是开了一个二维 的数组,进行二维的遍历。假设,a[n],b[m]是给定的序列。如果遍历的过程中,a[i-1]=b[j-1],那么显然这一状...原创 2019-05-18 11:29:21 · 314 阅读 · 0 评论 -
动态规划之最长上升子序列
最长上升子序列问题是经典的动态规划问题。即给定一个序列,求出长度最长,且数值由小到大的子序列。并且结果不唯一。如原始序列。2,1,5,3,6,4,6,3.其满足条件的子序列是1,3,4,6或者是2.4.5.6。那么如何分析此类问题呢。首先我们应该思考前后两个状态之间的关系,即求出其递归公式。并且是最大问题,当前一状态是最大的,那么后一状态同样是最大的。假设此状态是dp[5],那dp...原创 2019-05-17 21:19:14 · 209 阅读 · 0 评论 -
动态规划之小朋友过河问题
小朋友过桥问题:在一个夜黑风高的晚上,有n(n <= 50)个小朋友在桥的这边,现在他们需要过桥,但是由于桥很窄,每次只允许不大于两人通过,他们只有一个手电筒,所以每次过桥的两个人需要把手电筒带回来,i号小朋友过桥的时间为T[i],两个人过桥的总时间为二者中时间长者。问所有小朋友过桥的总时间最短是多少。思路分析:假设过河有四个小朋友,其过河时间分别为1,2,3,4。我们先从...原创 2019-05-12 21:29:04 · 3347 阅读 · 9 评论 -
动态规划之数组分组
一个长度为 n 的数组 a,我们可以把它分成任意组,每一组是一段连续的区间。比如数组1,2,3,4,5 可以分成 (1,2),(3,4,5) 两组。每个分组都有一个权值,这个权值就是分组里面每个数的乘积对1000 取模的结果。对于数组 a 的一个分组方案,总权值就是每个分组的权值和。那么对于数组 a,分组以后最大的权值和是多少?输入格式输入第一张一个整数 n(1≤n≤1000)。接下来一行 ...原创 2019-04-30 21:36:34 · 1520 阅读 · 0 评论 -
计蒜客之墙壁涂色
题目大意蒜头君觉得白色的墙面好单调,他决定给房间的墙面涂上颜色。他买了 3 种颜料分别是红、黄、蓝,然后把房间的墙壁竖直地划分成 n 个部分,蒜头希望每个相邻的部分颜色不能相同。他想知道一共有多少种给房间上色的方案。例如,当 n=5 时,下面就是一种合法方案。由于墙壁是一个环形,所以下面这个方案就是不合法的。输入格式一个整数 nn,表示房间被划分成多少部分。(1≤n≤50)...原创 2019-05-08 20:42:08 · 274 阅读 · 0 评论 -
计蒜客之一维消消乐
一维消消乐是一款非常简单的游戏。有 n 颗珠子排成一排,每一颗珠子有一个价值 wi(可能是负数)。游戏是这样,你可以选择如若干对相邻的珠子,让他们同时消去。每一对珠子的消失,都会使得总分数加上两颗珠子相乘的分数。注意,每个珠子只能消一次,并且珠子消去以后,还会占位。输入格式输入第一行一个整数n(1≤n≤10000)。接下来一行输入 n 个整数 (−1000≤ wi ≤1000)。输出格式...原创 2019-04-17 19:01:14 · 1277 阅读 · 0 评论 -
动态规划入门
要体会到动态规划算法的优点,可以了解一下下面的一个小栗子。第一步已经计算1+1+1=3;第二步,计算1+1+1+1=?不假思索的话,肯定是从一加到底,虽然这样做也对,但是考虑到算法的空间、时间复杂度,再结合第一步可知,应该有一个优化的算法,即直接第一步的结果加一。从一我们要考虑到子问题与重复求解的优化,理解了这一点 ,你就算是入门了。那么下边将专门的介绍动态规划!-------------...原创 2019-04-16 21:40:13 · 100 阅读 · 0 评论