动态规划
文章平均质量分 80
我只是一只自动小青蛙
这个作者很懒,什么都没留下…
展开
-
动态规划(十):其他题目
647. 回文子串给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。注意:回文子串是要求连续的1、dp数组布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。2、递推公式想要等到dp[i][j],整体上是两种,就是s[i]与s[j]相等,s[i]与s[j]不相等这两种。当s[i]与s[j]不相等,那没啥好说的原创 2021-07-06 19:18:26 · 153 阅读 · 2 评论 -
动态规划(九):编辑距离
//d[i][j]为s[0,i - 1]和t[0,j - 1]中含有s[i-1]元素的最长子序列原创 2021-07-06 16:28:21 · 190 阅读 · 0 评论 -
动态规划(八):子序列系列
一、最长递增子序列(非连续)300. 最长递增子序列给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。1、dp数组dp[i]为以元素nums[i]结尾的最长递增子序列。2、递推公式位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 + 1 的最大值。 for(int j = i -原创 2021-07-06 11:02:53 · 1111 阅读 · 1 评论 -
动态规划(七):买卖股票发大财
一、买卖股票(单次买卖,持有一支)121. 买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。1、dp数组含义我们使用二维数组记录第i天的两种状态dp[i][0]:第i天不持有股票手中的现金dp[i][1]:第i天持有股票手原创 2021-07-05 16:57:35 · 303 阅读 · 0 评论 -
动态规划(六):打家劫舍
一、打家劫舍基础题198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组nums,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。1、dp数组含义dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i]2、递推公式对于第i间房屋,可以分为两种情况:不偷第i间房屋:d原创 2021-07-05 10:10:42 · 359 阅读 · 0 评论 -
动态规划(五):多重背包问题
一、多重背包问题背包问题为有N种物品和一个最多能被重量为W 的背包。第i件物品的重量是weight[i],数量为Mi,得到的价值是value[i] ,没件物品只能使用一次,将这些物品装进背包,怎么装价值最高。二、多重背包问题的解法我们注意到01背包并没有要求物品不一样,因此我么可以把多重背包摊开,把Mi件第i中物品视作Mi种物品,没种只有一个,这就转换成一个01背包问题,具体的转化方式有两种1、显示摊开void test_multi_pack() { vector<int> w原创 2021-07-03 08:20:43 · 1295 阅读 · 0 评论 -
动态规划(三):01背包问题
一、背包问题概述背包问题为有N件物品和一个最多能被重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。将这些物品装进背包,怎么装价值最高。 根据条件不同,可以分为以下几类:01背包:每件物品只有一个,要不拿一个,要不不拿完全背包:每件物品有无数个,可以拿0-任意个多重背包:不同物品数量不同分组背包:多种物品组成一个小组,每组只能拿一种组合背包:01背包,完全背包与多重背包的组合体leetcode上学会01背包,完全背包和多种背包足够了,因此这里只讲这三种原创 2021-06-30 15:56:21 · 982 阅读 · 1 评论