动态规划 DP
文章平均质量分 51
laugh12321
这个作者很懒,什么都没留下…
展开
-
51 Nod 1083 矩阵取数问题(动态规划)
原题链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1083题目分析:通过读题发现我们只能往右边或者下边走,意味着“不走回头路”,就是说矩阵里面每个位置最多只会经过一次。其实很多地方是“没有机会”经过的。比如我现在在第 行的第 列,不管之前走的路径是什么样子,则它左边和上边的位置都是不可能再走到的。也就是说...原创 2018-08-09 22:11:56 · 198 阅读 · 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 · 168 阅读 · 0 评论 -
[动态规划] 矩阵链乘法
讲解: 个矩阵相乘时, 为 行 列的矩阵,以 为例进行分析,这些矩阵的乘积有多种计算顺序。举个例子,我们按习惯的从左到右的顺序进行计算时可以写作 ,从左到右计算时可以写作 。除此之外还有 等等,计算的顺序多种多样。这些计算顺序得出的结果(矩阵链乘积)完全相同,但不同顺序下的 “ 乘法运算次数 ” 会有所差异。处理矩阵链乘法问题时,如果检查所有可能的计算顺序,那么算法的复杂度将达到 ...原创 2018-08-10 18:09:09 · 5967 阅读 · 4 评论 -
51 Nod 1183 编辑距离 (动态规划基础)
原题链接:1183 编辑距离题目分析:这个最少的操作次数,通常被称之为编辑距离。“编辑距离”一次本身具有最短的意思在里面。因为题目有“最短”这样的关键词,首先我们想到的是 。是的,当 的距离为 的距离为 的时候,我们可以找到这样的操作次数的界限:把 中字符全删了,再添加 的全部字符,操作次数 。 把 中字符删或加成 个,再修改操作次数最多 。虽然,我们找到了这样的上界, ...原创 2018-08-11 17:14:51 · 127 阅读 · 0 评论 -
51 Nod 1134 最长递增子序列 (动态规划基础)
原题链接:1134 最长递增子序列题目分析:长度为 的数列 有多达 个子序列,但我们应用动态规划法仍可以很高效地求出最长递增子序列()。这里介绍两种方法。先考虑用下列变量设计动态规划的算法。这里设输入数列的第一个数为 。 一位数组, 为由 到 中的部分元素构成且最后选择了 的 的长度。 一位数组, 为由 到 中的部分元素构成且最后选择了 的 的...原创 2018-08-11 18:06:44 · 103 阅读 · 0 评论 -
HDU 2084 数塔 (动态规划DP)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084题目分析:此题采用动态规划自底向上计算,如果我们要知道所走之和最大,那么最后一步肯定是走最后一排数其中一个,向上退,倒数第二步肯定走最后一排数对应的倒数第二排最大的一个(将最后对应最后步走的最大的数加起来存在倒数第二步的数组中)再向上推,一直推到最上面的第0步,那么]最后所存的结果一定是最大的...原创 2018-08-07 21:05:38 · 224 阅读 · 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 · 175 阅读 · 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 · 151 阅读 · 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 · 714 阅读 · 0 评论