动态规划的核心思想是将大问题化为若干小问题来解决,看了一些博客一般会用递归来解,但是不管是递归还是递推都是这种算法表现的形式,研究了一位大佬做的一道题发现很巧妙。 某小红薯在小红书的活动中抽奖中了一定价值的薯券,这些薯券可以用来购买一批商品,求有多少种购买组合。其中一件商品可以买多件。 输 入:薯券 ...
分类:
其他好文 时间:
2020-08-26 17:13:15
阅读次数:
72
动态规划 讲解动态规划的资料很多,官方的定义是指把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解。概念中的各阶段之间的关系,其实指的就是状态转移方程。 我们一般看到的状态转移方程,基本长成下面这样(注:i、j、k 都是在定义DP方程中用到的参数。opt 指代特殊的计算逻辑,大多数情 ...
分类:
编程语言 时间:
2020-08-25 16:04:26
阅读次数:
48
##1.主要思想 简单来说就是将大问题划分为小问题,并解决小问题重复计算的问题。 ##2.适用场景 常常适用于有重叠子问题和最优子结构性质的问题。 ##3.模板步骤 确定动态规划状态 写出状态转移方程(画出状态转移表) 考虑初始化的条件 考虑输出状态 考虑对时间和空间复杂度的优化(Bonus) ## ...
分类:
其他好文 时间:
2020-08-24 16:41:14
阅读次数:
55
如何量化两个字符串之间的相似程度呢?有一个非常著名的量化方法,那就是编辑距离(Edit Distance)。 编辑距离指的就是,将一个字符串转化成另一个字符串,需要的最少编辑操作次数(比如增加一个字符、删除一个字符、替换一个字符)。编辑距离越大,说明两个字符串的相似程度越小;相反,编辑距离就越小,说 ...
分类:
其他好文 时间:
2020-08-18 13:57:08
阅读次数:
65
斜率优化: 每次把i*j的项作为k,i的项和常数项作为b,j的项作为y,要是i的项最小,也就是截距最小,就是y=kx第一次接触到函数时,于是可以用单调队列维护一个凸包(以下都讲下凸包)。结合图可知i的最优决策为第一个斜率>k的点。 step1:当head~head+1的斜率<k时,head++; s ...
分类:
其他好文 时间:
2020-08-18 13:56:29
阅读次数:
60
"""经典的数字三角形问题(简单易懂,经典动态规划)73 88 1 02 7 4 44 5 2 6 5D(r,j):"""l = [[7],[3,8], [8,1,0], [2,7,4,4],[4,5,2,6,5]]n = 5def get_max_sum(row, col): if n == ro ...
分类:
编程语言 时间:
2020-08-10 09:27:40
阅读次数:
86
题目来源:算法竞赛进阶指南 题目标签:递归,动态规划 题目链接:https://www.acwing.com/problem/content/98/ 思路:1.先用动态规划考虑三塔问题,状态转移方程为:d[ i ]=d[i - 1] * 2 + 1 (当前圆盘等于把当前圆盘上面的圆盘先移动到第二个塔 ...
分类:
其他好文 时间:
2020-08-09 13:09:20
阅读次数:
71
1. Greedy 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。 2. 贪心算法与回溯和动态规划 贪心算法与动态规划的不同点: 贪心算法与动态规划的不同在于它对每个子问题的解决方案都做出选择,不能回退。 动态规划则会保存以前的运 ...
分类:
编程语言 时间:
2020-08-08 21:19:45
阅读次数:
70
剑指Offer中的动态规划除了一题hard(正则表达式匹配)都比较简单。 连续子数组的最大和 这道题可以作为线性dp的模板。 用dp[i]表示以元素nums[i]为结尾的连续子数组最大和。 当以nums[i-1]为结尾的数组和(dp[i-1])大于0,对于以nums[i]为结尾的子数组(dp[i]) ...
分类:
其他好文 时间:
2020-07-31 22:58:15
阅读次数:
102
题意: 多组输入,给定a,b两个数组,长度分别为n,m。每个元素有两个值:wi,vi,要求从两个数组中分别选出一个子数组,使得两个子数组的wi和相同,并使总的vi之和最大。 数据范围:n,m<=1e3,wi<=1e3,vi<=1e9,\(\sum(n+m)<=1e4\) 解法: 很容易想到分别对两个 ...
分类:
其他好文 时间:
2020-07-31 18:01:31
阅读次数:
115