随笔分类 -  动态规划

摘要:内容参考书籍《算法竞赛入门到进阶》 区间DP就是先在小区间进行DP,然后合并小区间,得到大区间,直到解决最后的大区间问题。相较于普通的DP问题,它不仅需要状态转移方程还需要枚举所有可能的区间。 通常情况下,区间DP至少需要两层for循环,例如: for (int i = 1; i < n; ++i) 阅读全文
posted @ 2020-05-25 23:32 DemonSlayer 阅读(152) 评论(0) 推荐(0)
摘要:内容参考书籍《算法竞赛入门到进阶》 先看一道经典题:poj1163 http://poj.org/problem?id=1163 如果此题按照从上往下的方法计算,每走一步下一步就有2种选择,其复杂度为2n 那么我们从下往上算,下面给出dfs代码: int dfs(int i,int j) { if 阅读全文
posted @ 2020-05-23 18:00 DemonSlayer 阅读(294) 评论(0) 推荐(0)
摘要:内容参考书籍《算法竞赛入门到进阶》 LIS问题:给定一个长度为N的数组,找出一个最长的单调递增子序列。例如5,6,7,4,2,8,3,它的单调递增子序列为5,6,7,8,长度为4。 下面通过一道经典例题来讲解 hdu 1257:http://acm.hdu.edu.cn/showproblem.ph 阅读全文
posted @ 2020-04-06 22:25 DemonSlayer 阅读(358) 评论(0) 推荐(1)
摘要:对于一个字符串而言: 字串是指在该字符串中取出连续的一块 子序列是指在该字符串中删去若干元素后得到的序列 给定两个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。最长公共子序列是长度最长的子序列。 LCS问题:给定两个序列X和Y,找出X和Y的一个最长公共子序列。 阅读全文
posted @ 2020-03-27 01:15 DemonSlayer 阅读(374) 评论(0) 推荐(0)
摘要:内容参考书籍《算法竞赛入门到进阶》 0/1背包是最经典的DP问题,没有之一。 背包问题:有多个物品,重量不同、价值不同,以及一个容量有限的背包,选择一些物品装到背包中,问怎么才能使装进背包的物品总价值最大 如果每个物体可以切分,则是一般背包问题,使用贪心法。例如吃自助餐,要使吃到肚子里的东西价值最大 阅读全文
posted @ 2020-03-16 23:41 DemonSlayer 阅读(541) 评论(0) 推荐(0)
摘要:内容参考书籍《算法竞赛入门到进阶》 DP与分治法的区别: (1)分治法是把问题分成独立的子问题,各个子问题能独立解决,一个子问题内部的计算不需要其他子问题的数据,例如归并排序。 (2)DP的子问题之间是相关的,前面子问题的解决结果被后面的子问题使用。 (DP比分治复杂得多) 求解DP问题有3步,即定 阅读全文
posted @ 2020-03-13 23:01 DemonSlayer 阅读(190) 评论(0) 推荐(0)