动态规划
动态规划是算法中的重点之一,所以本专栏讲述一些动态规划常见的一些情况。
carson0408
热衷于编程,喜欢研究算法,挑战难题,享受AC的过程,希望自己能够不断进步,不断成长。
展开
-
算法题解之字符串的包含问题
本文主要讲的算法题是关于两个字符串A和B,求A在B中出现的次数,并且不要求A中的所有字符在B中连续出现,例如A=ab,B=abadcb,那么结果为3. 首先,我们假定:假如A为空字符串,B为非空,那么次数为1。而如果B为空字符串,那么次数为0。用L(i,j)表示A的i个字符在B的j个字符中出现的次数。除了之前的假定,我们现在动态地观察规律,假如A[i]=B[j]那么需要看A的前i原创 2018-01-31 10:32:33 · 735 阅读 · 0 评论 -
动态规划之错排问题以及相应的变形
一.错排原理何谓错排?错排就是完全乱序,比如有n个人各有自己的编号,链接:https://www.nowcoder.com/questionTerminal/95e35e7f6ad34821bc2958e37c08918b来源:牛客网当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用D(n)表示,那么D(n-1)就表示n-1个编号元素放在n-1个编号位置,各不原创 2017-12-29 09:50:41 · 1694 阅读 · 0 评论 -
最大方子阵与最大和子矩阵--Java语言
本文主要讲的是关于矩阵的子方阵问题,典型题型有:所有元素为1的最大子方阵、最大和子矩阵。首先先讲述的是所有元素为1的最大子方阵。可以利用动态规划方法求解该问题。用B[m][n]表示二元矩阵。算法的思想是构造一个临时矩阵res[][],其中res[i][j]表示包括B[i][j]在内的值全为1的子方阵的大小,B[i][j]是该子方阵最右下角的元素。因此,初始时,res第一行与第一列的值即为B矩阵原创 2017-12-04 19:50:02 · 3241 阅读 · 0 评论 -
LCS问题与LIS问题--Java语言
一般在各大oj上做算法题时,LCS问题和LIS问题是常遇到的问题。首先是LCS问题:一般来说,如果求最大公共子串比较好处理,只需要内外循环对两个字符串遍历即可,求出哪个连续公共段最长即可。但是若不考虑连续,求最大公共子序列时,问题难度得到了一定的增加,如果只是简单的遍历便无法得到正确的解。因此可以通过打表法的形式,即通过动态规划思想,然后利用二维数组记录公共子序列的状态,然后利用状态转移方程来求解...原创 2017-12-03 20:28:58 · 1593 阅读 · 1 评论 -
回文数组(搜狐编程)--python
题目描述:有一个数组正序和倒序相同,则这个数组被称为‘回文数组’。现在给定一个数组,要求对其进行插入数字,使其称为回文数组,求所有能实现方案中,使得最后回文数组和最小的方案,输出最终回文数组的和。思路:求最大回文串,即求一个数组正序与倒序的最大公共串,并用一个二维数组dp进行记录和。注意判定条件,当s1[i]==s2[j]时,dp[i][j]=dp[i-1][j-1]+s1[i];否则dp[i原创 2017-09-17 21:53:35 · 1831 阅读 · 0 评论 -
0-1背包问题
背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。一般的,0-1背包问题可以描述为1个背包,物品的重量为wi,其价值为vi,背包容量为c。使其价值总量最大。即:原创 2017-09-03 20:52:39 · 1332 阅读 · 0 评论 -
凸多边形的最优三角剖分
如图所示,用顶点的逆时针序列表示凸多边形,即p={v0,v1,...,vn-1}表示具有n条边的凸多边形。给定凸多边形p,以及定义在由多边形的边和弦组成的三角形上的权函数w。如图所示划分,要求确定该凸多边形的三角剖分,使得该三角形上的劝之和最小。解析:若凸(n+1)边形p={v0,v1,...,vn}的最优剖分T包含三角形v0vkvn,1=1时,凸子多边形至少有3个顶点,t[i][j]应为原创 2017-09-03 15:09:33 · 5169 阅读 · 0 评论 -
最长回文串(可不连续)与最大公共子串(可不连续)
其实标题上的这两种情况转化一下就是一种情况,即最大公共子串(可不连续)。最长回文串(可不连续)的意思是以某个字符为轴,分别往左右遍历的公共子串的最大长度(可不连续),那么不如将最大回文串改为一个字符串的顺序与逆序的最大公共子串(可不连续)。以下通过一道题目进行解释。题目描述:回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。每个字符串都可以通过向中间添加一些字符,使原创 2017-09-01 18:48:26 · 2409 阅读 · 0 评论 -
整数划分问题(python)--递归 and 动态规划(m个盘里放n个苹果思想类似)
这篇博客旨在对正整数划分的多种题目就递归和动态规划进行讨论与总结以下将正整数划分分为三种题型:1.一般性,即对个数以及大小以及重复性不加约束 2.对重复性有约束 3.对元素的个数有约束。至于每个元素的大小则可以归并到第一类题:通过更改q(n,m)的参数m即可。1.问题描述:描述将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1原创 2017-08-26 13:44:14 · 8502 阅读 · 1 评论 -
关于拼凑面额的动态规划算法
题目描述:给你六种面额1、5、10、20、50、100元的纸币,假设每种币值的数量都足够多,编写程序求组成N员(N为0-10000的非负整数)的不同组合的个数。输入描述:输入为一个数字N,即需要拼凑的面额输出描述:输出也是一个数字,为组成N的组合个数。示例1输入5输出2解题思路:这个题的思路是动态规划的算法思路,如果用二维的则会超时,采用一维的则首先原创 2017-08-23 09:58:55 · 5601 阅读 · 0 评论