![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 82
HxxxxxxxU
我就是我 不一样的花火
展开
-
华为机试:购物单(考点:动态规划)
题目:分析:这是一道01背包问题,有一个限制条件就是附件必须要在主件购买的前提下才能购买。本题的总钱数就类似于背包问题中的总重量,价格与重要度乘积的总和就类似于背包问题中的价值。定义数组dp[i][j]表示前i件物品花费j所得到的最大价值,对于每件物品可以选择放或者不放,具体:(1)如果j<price[i-1](第i件物品的价格),则不能放入,dp[i][j]=dp[i-1][j];(2)如...原创 2018-03-31 11:46:28 · 6327 阅读 · 4 评论 -
LintCode:110.最小路径和(动态规划)
描述给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。你在同一时间只能向下或者向右移动一步分析:典型的动态规划题。dp数组为m+1行,n+1列。dp[i][j]表示到网格(i,j)处时的最小路径和,可表示为dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i-1][j-1],但注意第一行和第一列的元素只能从其左边元素和上边元素得到,...原创 2018-07-05 13:40:27 · 501 阅读 · 0 评论 -
Lintcode:136.切割回文串 VS 108. 切割回文串II(考点:回溯法、DFS、DP)
136. 切割回文串描述给定一个字符串s,将s分割成一些子串,使每个子串都是回文串。返回s所有可能的回文串分割方案。样例给出 s = "aab",返回[ ["aa", "b"], ["a", "a", "b"]]分析:本题采用回溯法,深度优先遍历字符串。注意保存子结果的条件以及每次返回上一层时(回溯时),需要把子结果中的在该层添加的(最后添加的)删掉再返回上一层。public c原创 2018-07-11 11:03:50 · 314 阅读 · 0 评论 -
LintCode:119.编辑距离(动态规划)
描述给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。你总共三种操作方法:插入一个字符删除一个字符替换一个字符分析:采用动态规划解题,初始化dp数组,int[][] dp=new int[word1.length+1][word2.length+1],dp[i][j]表示到word1下标为i,word2下标为j时的最小编辑距离。当i=0时,dp[0][j]=j...原创 2018-07-09 15:08:26 · 536 阅读 · 0 评论 -
合唱团——网易2017内推笔试编程题
链接:https://www.nowcoder.com/questionTerminal/661c49118ca241909add3a11c96408c8来源:牛客网有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这k 个学生的能力值的乘积最大,你能返回最大的乘积吗? 分析:本题采用动态规划的思想。对该问...原创 2018-06-19 14:14:36 · 518 阅读 · 0 评论 -
LintCode:最长上升子序列、最长公共子序列、最长公共子串
问题1:最长上升子序列最长上升子序列的定义:最长上升子序列问题是在一个无序的给定序列中找到一个尽可能长的由低到高排列的子序列,这种子序列不一定是连续的或者唯一的分析:动态规划,dp[i]表示到nums[i]为止的最长上升子序列长度。dp[i]=max(dp[i],dp[j]+1),其中0<=j<i且nums[j]<nums[i]其中,dp[i]初始都设为1,因为自身也是一个上升子...原创 2018-06-14 11:09:20 · 269 阅读 · 0 评论 -
LintCode:79. 最长公共子串 VS 77. 最长公共子序列
最长公共子串与最长公共子序列的主要区别在于一个必须是连续的另一个则不一定。最长公共子串:题目:给出两个字符串,找到最长公共子串,并返回其长度。分析:这是一个经典的动态规划题,定义dp矩阵,dp[i][j]表示A串匹配到i,B串匹配到j时的最大公共长度。 dp有A.length()+1行,有B.length()列。第一行与第一列都为0; 有状态转移方程 ...原创 2018-03-29 17:00:03 · 1507 阅读 · 0 评论 -
LintCode:875. Longest Line of Consecutive One in Matrix
题目:Given a 01 matrix m, find the longest line of consecutive one in the matrix. The line could be horizontal, vertical, diagonal or anti-diagonal.思路:题目的意思就是求一个给定二维矩阵上在水平方向、垂直方向、对角线方向和反对角线方向上连续1的最大个数。可...原创 2018-03-29 13:33:17 · 222 阅读 · 0 评论 -
背包问题——“01背包”详解及实现(包含背包中具体物品的求解)
-----Edit by ZhuSenlin HDU 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为C1,C2,…,Cn,与之相对应的价值为W1,W2,…,Wn.求解将那些物品装入背包可使总价值最大。 动态规划(DP): 1) 子问题定义:F[i][j]表示前i件物品中选取若干件物品放入剩余空间为j的背包中所能得到的最大价值。 ...转载 2018-04-04 10:12:12 · 614 阅读 · 0 评论 -
动态规划之钢条切割
题目:给一个 n 英寸长的杆子和一个包含所有小于 n 的尺寸的价格. 确定通过切割杆并销售碎片可获得的最大值.例如,如果棒的长度为8,并且不同长度部件的值如下,则最大可获得值为 22(通过切割两段长度 2 和 6 )分析:场景:把长钢条切割为短钢条出售。切割工序本身无成本。求最佳切割方案。假定:出售一段长度为 i 英寸的钢条的价格为Pi(i = 1, 2, …, )单位:$,钢条长度均为整英寸。下...原创 2018-03-28 11:35:43 · 901 阅读 · 0 评论 -
动态规划之割绳子
题目:给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],…,k[m]. 请问k[0]k[1]…*k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18.思路:采用自底向上的动态规划方法。设f(n)代表长度为n的绳子剪成若干段的最大乘积,如果第一刀下去,第一...原创 2018-03-28 10:27:15 · 3754 阅读 · 4 评论 -
动态规划之背包问题及输出背包具体方案
题型1:LintCode 92. 背包问题题目:在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i]。分析:dp[i][j]:当背包总重量为j且目前有i个物品时,背包最多装满dp[i][j]的空间。 状态转移方程为:dp[i][j]=max{dp[i-1][j-A[i-1]]+A[i-1], dp[i-1][j]},其中dp[i-1][j-A[...原创 2018-03-28 15:16:31 · 7207 阅读 · 0 评论 -
LintCode:118.不同的子序列(考点:动态规划)
描述给出字符串S和字符串T,计算S的不同的子序列中T出现的个数。子序列字符串是原始字符串通过删除一些(或零个)产生的一个新的字符串,并且对剩下的字符的相对位置没有影响。(比如,“ACE”是“ABCDE”的子序列字符串,而“AEC”不是)。 样例给出S = "rabbbit", T = "rabbit"返回 3分析:采用动态规划的思想,dp[i][j]表示S前i个字符中含有T前j个字符的个数,不管S...原创 2018-07-14 13:35:33 · 280 阅读 · 0 评论