动态规划
文章平均质量分 70
coolwriter
这个作者很懒,什么都没留下…
展开
-
139. Word Break
Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine if s can be segmented into a space-separated sequence of one or more dictionary words. You may assu原创 2018-01-12 17:30:33 · 175 阅读 · 0 评论 -
动态规划(三)最长递增子序列LIS、最大连续子序列和、最大连续子序列乘积
最长递增子序列LIS问题给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)。例如:给定一个长度为6的数组A{5, 6, 7, 1, 2, 8},则其最长的单调递增子序列为{5,6,7,8},长度为4.最长递增子序列O(NlgN)算法假设存在一个序列d[1..9] ={ 2,1 ,5 ,3 ,6,4, 8 ,9, 7},可以看出来它的LIS长度为5...原创 2018-04-12 16:53:46 · 4806 阅读 · 0 评论 -
动态规划(四)矩阵连乘法
所谓矩阵链乘法是指当一些矩阵相乘时,如何加括号来改变乘法顺序从而来降低乘法次数。例如有三个矩阵连乘:A1*A2*A3,其维数分别为:10*100,100*5,5*50.如果按照((A1*A2)A3)来计算的话,求(A1*A2)要10*100*5=5000次乘法,再乘以A3需要10*5*50=2500次乘法,因此总共需要7500次乘法。如果按照(A1(A2*A3))来计算的话,求(A2*A3)要10...原创 2018-04-12 17:42:24 · 6742 阅读 · 1 评论 -
动态规划拜访
题目描述 现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。 给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。 ...原创 2018-04-23 11:02:30 · 244 阅读 · 0 评论 -
动态规划,最大直方图
题目描述 有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。 给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。 测试样例: [2,7,9,4,1],5 返回:14class MaxInn...原创 2018-04-23 11:54:55 · 673 阅读 · 0 评论 -
最大连续子序列和
题目描述 对于一个有正有负的整数数组,请找出总和最大的连续数列。 给定一个int数组A和数组大小n,请返回最大的连续数列的和。保证n的大小小于等于3000。 测试样例: [1,2,3,-6,1] 返回:6class MaxSum {public: int getMaxSum(vector<int> A, int n) { // write cod...原创 2018-04-27 15:48:54 · 889 阅读 · 0 评论 -
最小编辑代价(最小编辑距离)
题目描述:给定两个字符串str1和str2,再给定三个整数ic,dc,rc,分别代表插入、删除、替换一个字符的代价,返回将str1编辑成str2的最小代价。 举例: str1=”abc” str2=”adc” ic=5 dc=3 rc=2,从”abc”编辑到”adc”把b替换成d代价最小,为2; str1=”abc” str2=”adc” ic=5 dc=3 ...原创 2018-07-26 16:11:07 · 2150 阅读 · 0 评论 -
字符串交错组成
给定str1,str2,aim,若aim是仅包含str1,str2中的字符。若aim中属于str1的字符仍然保持在str1中原来的顺序,属于str2的字符仍然保持在str2中原来的顺序,则称aim是str1和str2的交错组成。思路:构造一个(M+1)*(N+1)的矩阵dp:dp[0][0]=true.aim为空时可以由str1和str2的空字符串组成2.dp[i][0]表示a...原创 2018-07-26 20:37:03 · 835 阅读 · 0 评论 -
字符串通配
题目描述 对于字符串A,其中绝对不含有字符’.’和’’。再给定字符串B,其中可以含有’.’或’’,’’字符不能是B的首字符,并且任意两个’’字符不相邻。exp中的’.’代表任何一个字符,B中的’’表示’’的前一个字符可以有0个或者多个。请写一个函数,判断A是否能被B匹配。给定两个字符串A和B,同时给定两个串的长度lena和lenb,请返回一个bool值代表能否匹配。保证两串的长度均小于等于3...转载 2018-07-26 21:20:53 · 725 阅读 · 0 评论 -
动态规划(二)最长公共子串和最长公共子序列
1.最长公共子序列链接:https://www.nowcoder.com/questionTerminal/c996bbb77dd447d681ec6907ccfb488a 来源:牛客网对于两个字符串,请设计一个高效算法,求他们的最长公共子序列的长度,这里的最长公共子序列定义为有两个序列U1,U2,U3…Un和V1,V2,V3…Vn,其中Ui&amp;amp;ltUi+1,Vi&amp;amp;ltVi...原创 2018-04-12 16:33:25 · 580 阅读 · 0 评论 -
动态规划(一)硬币找零,机器人路径
动态规划(Dynamic Programming,简称DP),虽然抽象后进行求解的思路并不复杂,但具体的形式千差万别,找出问题的子结构以及通过子结构重新构造最优解的过程很难统一,并不像回溯法具有解决绝大多数问题的银弹。动态规划求解的一般思路1.硬币找零 扩展1:单路取苹果 扩展2:机器人路径2.字符串相似度/编辑距离(edit distance) 应用1:子串匹配...原创 2018-04-12 14:29:27 · 1894 阅读 · 0 评论 -
堆箱子 叠罗汉
有一堆箱子,每个箱子宽为wi,长为di,高为hi,现在需要将箱子都堆起来,而且为了使堆起来的箱子不到,上面的箱子的宽度和长度必须小于下面的箱子。请实现一个方法,求出能堆出的最高的高度,这里的高度即堆起来的所有箱子的高度之和。 给定三个int数组w,l,h,分别表示每个箱子宽、长和高,同时给定箱子的数目n。请返回能堆成的最高的高度。保证n小于等于500。 测试样例: [1,1,1],[1,1,...原创 2018-01-27 17:38:34 · 1183 阅读 · 0 评论 -
机器人走方格
题目描述 有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。 给定两个正整数int x,int y,请返回机器人的走法数目。保证x+y小于等于12。 测试样例: 2,2 返回:2/ 题目要求走的是大格子而不是网格线的交点,所以有两种走法。 // 二维数组用于计算走到当前格子的走法总数,为其上方格子走法总数与其左原创 2018-01-25 16:16:08 · 1574 阅读 · 1 评论 -
机器人走方格障碍
题目描述 有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。注意这次的网格中有些障碍点是不能走的。 给定一个int[][] map(C++ 中为vector >),表示网格图,若map[i][j]为1则说明该点不是障碍点,否则则为障碍。另外给定int x,int y,表示网格的大小。请返回机器人从(0,0)走到(x - 1原创 2018-01-25 17:31:05 · 870 阅读 · 0 评论 -
最长递增子序列LIS
问题给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)。例如:给定一个长度为6的数组A{5, 6, 7, 1, 2, 8},则其最长的单调递增子序列为{5,6,7,8},长度为4.最长递增子序列O(NlgN)算法假设存在一个序列d[1..9] ={ 2,1 ,5 ,3 ,6,4, 8 ,9, 7},可以看出来它的LIS长度为5。 下面一步一步试转载 2017-12-17 12:01:19 · 253 阅读 · 0 评论 -
硬币表示
题目描述 有数量不限的硬币,币值为25分、10分、5分和1分,请编写代码计算n分有几种表示法。 给定一个int n,请返回n分有几种表示法。保证n小于等于100000,为了防止溢出,请将答案Mod 1000000007。 测试样例: 6 返回:2递归方法int MakeChangeCore(int n,int denom) { int next_denom=0原创 2018-01-27 15:40:37 · 336 阅读 · 0 评论 -
叠罗汉一
题目描述 叠罗汉是一个著名的游戏,游戏中一个人要站在另一个人的肩膀上。同时我们应该让下面的人比上面的人更高一点。已知参加游戏的每个人的身高,请编写代码计算通过选择参与游戏的人,我们多能叠多少个人。注意这里的人都是先后到的,意味着参加游戏的人的先后顺序与原序列中的顺序应该一致。 给定一个int数组men,代表依次来的每个人的身高。同时给定总人数n,请返回最多能叠的人数。保证n小于等于500。原创 2018-02-04 17:28:04 · 1434 阅读 · 0 评论 -
动态规划(五)背包问题
基本思想: 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基...原创 2018-04-15 17:50:42 · 410 阅读 · 0 评论 -
动态规划(六)最短路径
题目 给定一个矩阵m,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有路径中最小的路径和。 例子: 给定m如下: 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0 路径1,3,1,0,6,1,0是所有路径中路径和最小的,所以返回12。 解法1思路:使用动态规划,定义 dp[M][N] , ...原创 2018-04-16 14:00:04 · 2612 阅读 · 0 评论 -
最大连续子序列
链接:https://www.nowcoder.com/questionTerminal/afe7c043f0644f60af98a0fba61af8e7?toCommentId=2063699来源:牛客网给定K个整数的序列{ N1, N2, …, NK },其任意连续子序列可表示为{ Ni, Ni+1, …, Nj },其中 1 <= i <= j <= K。最大连续子序列...原创 2019-01-07 21:51:36 · 413 阅读 · 0 评论