动态规划
文章平均质量分 60
基于个人平时所见的题目对动态规划经典问题的总结
姐姐带你拿捏大厂算法
ACM-ICPC(区域铜),省赛银,Codeforces:2100+,LeetCode:2600+
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
简单背包问题的变形
刷题遇到的背包问题一定不是一个指向很明显的题目甚至大多数时间都需要我们在模板上做一些处理才能得到正解 那么下面简单介绍一些刷题遇到的变形题目 1.求不超过要求高度的最高累加高度 题目看起来很绕没关系我们直接上例题 poj-3628 这个题目是价值和重量一样的背包问题 没什么好说的我们任然按照背包问题做但是dp[i][j]表示的就是前i个牛高度和不超过j的最大高度和 #include<iostream> #include<cstring> using namespace .原创 2022-04-20 19:33:59 · 1073 阅读 · 0 评论 -
动态规划之最长子串,最大连续序列和,最长回文子串
子串和子序列的区别在于子串是连续的而子序列是不连续的 学习了很久的动态规划问题 做了很多的题目我发现动态规划的突破口在于找到递推关系式也就成功的找到了转移方程 下面我们进入最长子串问题 先定义一个二维数组dp[][] dp[i][j]表示str[i-1]==str[j-1]那么如果str[i-1]==str[j-1]那么dp[i][j]==dp[i-1][j-1]+1如果当前两个相等那么直接就等于上一个的连续长度+1 如果不相等那么dp[i][j]=0; if(str1[i]==str2[j])dp[i原创 2022-03-29 13:02:10 · 1161 阅读 · 0 评论 -
动态规划之完全背包问题
昨天搞完了0/1背包问题今天又学习了完全背包问题再次做一个总结 完全背包问题题想较于0/1背包问题区别就在于 0/1背包中的物品只能使用一次而完全背包问题的物品可以使用任意次 那么解题的方法也与0/1背包问题十分相似当我们在装入一个物品之后随着背包的体积继续变大我们可以继续往背包里装东西 所以转移方程相较于0/1背包发生了变化dp[i][j]=max(dp[i][j],dp[i][j-vol[i]]+value[i]]这个转移方程不难理解 其实完全背包相比的是当放入第k个编号为i物品的包的价值和没有放入第k原创 2022-03-19 21:01:55 · 382 阅读 · 0 评论 -
动态规划之最长公共子序列 最长递增子序列
最长公共子序列 最长公共子序列很简单dp[i][j]分别代表str1的第i个字符和str2第j字符 那么如果当前字符相等那么即str1[i]==str2[j]那么dp[i][j]==dp[i-1][j-1]+1如果不等的话就比较麻烦了如果不等dp[i][j]=max(dp[i-1][j],dp[i][j-1])意思就是找str1前i-1个元素与str2前j个元素最大的子序列or意思就是找str1前i个元素与str2前j+1 个元素最大的子序列那么我们就有了转移方程 if(str1[i]==str2[j]原创 2022-03-23 20:25:26 · 1340 阅读 · 0 评论 -
动态规划之0/1背包问题(动态规划入门)
动态规划很早以前就接触过但是因为太晦涩难懂一下子到现在才开始真正的学习到其中的道理,0/1背包问题是动态规划的入门类问题 比较好理解 首先我们要知道动态规划是用于解决最优解的问题 它是一种思想而不是一种固定的算法 dp的问题解决一般分为三步 定义状态,转移状态,算法实现,个人认为其中转移状态是最难的 好的那么我们开始引入例题进行更清晰的讲解 下面是一个背包问题的模板题 “骨头收集者”带着体积为V的背包去捡骨头,已知每个骨头的体积和价值,求能 察上面的二维表 进背包的最大价值。N<1000,V≤原创 2022-03-18 22:57:38 · 1346 阅读 · 0 评论
分享