动态规划 DP
文章平均质量分 51
laugh12321
这个作者很懒,什么都没留下…
展开
-
51 Nod 1083 矩阵取数问题(动态规划)
原题链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1083 题目分析:通过读题发现我们只能往右边或者下边走,意味着“不走回头路”,就是说矩阵里面每个位置最多只会经过一次。其实很多地方是“没有机会”经过的。比如我现在在第 行的第 列,不管之前走的路径是什么样子,则它左边和上边的位置都是不可能再走到的。也就是说...原创 2018-08-09 22:11:56 · 212 阅读 · 0 评论 -
51 Nod 1006 最长公共子序列(LCS & DP)
原题链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1006 题目分析: 首先先知道LCS问题,这有两种: Longest Common Substiring —- 最长公共子串 Longest Common Sequence —- 最长公共子序列 这两者的区别是:前者必须是原字符串中连续的一段,后者可...原创 2018-08-10 10:31:03 · 187 阅读 · 0 评论 -
[动态规划] 矩阵链乘法
讲解: 个矩阵相乘时, 为 行 列的矩阵,以 为例进行分析,这些矩阵的乘积有多种计算顺序。举个例子,我们按习惯的从左到右的顺序进行计算时可以写作 ,从左到右计算时可以写作 。除此之外还有 等等,计算的顺序多种多样。这些计算顺序得出的结果(矩阵链乘积)完全相同,但不同顺序下的 “ 乘法运算次数 ” 会有所差异。 处理矩阵链乘法问题时,如果检查所有可能的计算顺序,那么算法的复杂度将达到 ...原创 2018-08-10 18:09:09 · 5997 阅读 · 4 评论 -
51 Nod 1183 编辑距离 (动态规划基础)
原题链接:1183 编辑距离 题目分析:这个最少的操作次数,通常被称之为编辑距离。“编辑距离”一次本身具有最短的意思在里面。因为题目有“最短”这样的关键词,首先我们想到的是 。是的,当 的距离为 的距离为 的时候,我们可以找到这样的操作次数的界限: 把 中字符全删了,再添加 的全部字符,操作次数 。 把 中字符删或加成 个,再修改操作次数最多 。 虽然,我们找到了这样的上界, ...原创 2018-08-11 17:14:51 · 134 阅读 · 0 评论 -
51 Nod 1134 最长递增子序列 (动态规划基础)
原题链接:1134 最长递增子序列 题目分析:长度为 的数列 有多达 个子序列,但我们应用动态规划法仍可以很高效地求出最长递增子序列()。这里介绍两种方法。 先考虑用下列变量设计动态规划的算法。这里设输入数列的第一个数为 。 一位数组, 为由 到 中的部分元素构成且最后选择了 的 的长度。 一位数组, 为由 到 中的部分元素构成且最后选择了 的 的...原创 2018-08-11 18:06:44 · 113 阅读 · 0 评论 -
HDU 2084 数塔 (动态规划DP)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 题目分析:此题采用动态规划自底向上计算,如果我们要知道所走之和最大,那么最后一步肯定是走最后一排数其中一个,向上退,倒数第二步肯定走最后一排数对应的倒数第二排最大的一个(将最后对应最后步走的最大的数加起来存在倒数第二步的数组中)再向上推,一直推到最上面的第0步,那么]最后所存的结果一定是最大的...原创 2018-08-07 21:05:38 · 239 阅读 · 0 评论 -
HDU 2044 一只小蜜蜂... (斐波那契数列)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2044 题目分析:其实仔细读题就会发现其中的规律, 其中;这是一个典型的斐波那契数列。 代码如下: #include <iostream> using namespace std; int t, a, b; long long num[50]; long long dp(int ...原创 2018-08-07 21:18:29 · 188 阅读 · 0 评论 -
HDU 2041 超级楼梯 (斐波那契数列 & 简单DP)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2041 题目分析:题目是真的水,不难发现规律涉及斐波那契数列,就直接上代码吧。 代码如下: #include <iostream> #include <cstring> using namespace std; int t, n, num[40]; int dp(in...原创 2018-08-07 21:25:45 · 170 阅读 · 0 评论 -
01 背包问题的三种写法
不妨先用最朴素的方法,针对每个物品是否放入背包进行搜索: // 输入 int n, W; int w[MAX_N], v[MAX_N]; // 从第 i 个物品开始挑选总重小于 j 的部分 int rec(int i, int j) { int res; if (i == n) { // 已经没有剩余物品了 res = 0; } els...原创 2018-08-08 17:34:36 · 768 阅读 · 0 评论