DP
文章平均质量分 65
肩上杯雪
自强不息,知行合一
展开
-
LeetCode 120. 三角形最小路径和 经典DP
题意: 从一个三角形数组的顶点出发,每次只能向下( row + 1) 或者 右下(row+1, column+ 1)。求到底部最短的路径和。 思路 是一个经典的DP入门题。开始的时候我和之前一道题搞混了,想用bfs,把和都加到最后一行,但是写完了才发现根本就不一样。。虽然一开始就知道是DP,但是还想用dfs试试,结果虽然做出来了,但是在第43个样例就超时了。还是老老实实dp吧。 首先dp[i][j] 我们设其为,从 triangle[I][j]到底部最短的路径和,显然,我们可以得知,dp[i][j]..原创 2020-07-14 15:25:32 · 151 阅读 · 0 评论 -
LeetCode面试题 17.13 回复空格
题意: 给定一个字典,里面包含一些string,给定一个句子,从中匹配最多的字典中的string。输出未匹配的最少的字符数。 思路: 动态规划 + 字典树 (1)动态规划 dp[i] 代表 前i个字符未匹配的最少字符数。 当遍历到第i个字符时,判断从 j 到第i个字符是否在字典中,如果在字典中,则 dp[i] = min(dp[i], dp[j-1])。为什么是 dp[j-1],因为第j个字符到第i个都在字典中,所以是前 j-1个字符的未匹配最少字符数。 若没在字典中匹配,则 dp[i] = dp[i-1.原创 2020-07-09 23:46:48 · 188 阅读 · 0 评论 -
LeetCode 53.最大子串和——DP
链接 : 原题 题意 : 给定一个整数序列,找一个具有最大和的连续子串。 思路 :动态规划。 最近做的滑动窗口题比较多,我一开始想了半天滑动窗口,但是这题明显不是,因为没有判断条件。 此题要O(n) 复杂度,所以肯定不能同时枚举起点和终点,所以只枚举重点。 dp[i]代表的是以 第i个数字为结尾的最大连续子串长度。 状态转移方程 : dp[i] = max(dp[i-1] + nums[i],...原创 2020-05-03 15:30:50 · 413 阅读 · 0 评论 -
LCS 最长公共子序列
前言 LCS(longest common string)最长公共子序列 我学习的时候经历了从一般的O(n2)复杂度,数组开maxn* maxn; 用滚动数组优化空间; LCS转化成LIS,时间复杂度O(logn)。本次也按照这个顺序进行叙述。 一般的O(n2)算法 int dp[maxn][maxn]; mem(dp,0); for (int i = 0; i &l...原创 2020-03-26 00:22:02 · 129 阅读 · 2 评论 -
HDU 5723 Abandoned country
题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=5723 题意 :有n个村庄,m条道路,每条道路有一个权值,现求最小的权值和使得所有村庄可以连通。并且求任意两点间距离的期望值。 思路 :第一问,最小权值和,毫无疑问是最小生成树。这里我用的是Kruskal算法。 对最小生成树不理解的同学可以去做hdu1863入门,这里是题解 https://blo...原创 2018-10-03 10:54:26 · 127 阅读 · 0 评论 -
HDU 6446 Tree and Permutation 树形DP
题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=6446 题意 :有n个节点,它们在一条边上排列,每个排列的权重和是从1-2-……-n的距离和,求n!个排列权重和的总和。 思路 :对于每一个排列,求从1走到n的路径和,考虑每个点对的贡献。 1)对于一个点对,在n!个排列中,他们相邻时有2 * (n-2)!种情况: 因为他们相邻,即排列组合中的捆绑法...原创 2018-10-04 20:33:29 · 173 阅读 · 0 评论 -
蒜头君的树——简单树形DP
题目链接 : https://nanti.jisuanke.com/t/16446 题意 :给定一棵带权树,求任意两边之间的最短距离和是多少。并且树的边权会发生改变,求每次改变后的距离和又是多少。 思路 : 对于下图所示的树 我们以边为研究对象分析。 对于 节点1和节点2之间的边 A,计算2、4、5到1或者3的距离时可以用到。用到的次数是 3 * (5-3) = 6次。即 记以2为根的子树的节...原创 2018-09-28 22:32:19 · 307 阅读 · 0 评论 -
HDU 2376——Average distance简单树形DP
题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=2376 题意 : 给定一棵带权树,计算任意两点之间的平均距离。 思路 : 计算任意两点间平均距离,即计算任意两点间的距离和,然后除以 C2n 即可。 计算两点间距离和,可以考虑每条边的贡献,假设边A权值为w,两端的点的个数分别是m,n,那么这条边的贡献就是 mnw。所以只要dfs一遍每条边 以两端的...原创 2018-09-29 21:37:24 · 206 阅读 · 0 评论 -
LIS 最长递增子序列
前言 LIS 即 longest increasing string,最长递增子序列,可以是不连续的。例如 2 3 5 2 3 4 5 的最长递增子序列为{2,3,4,5},长度为4. 两种方法可以求出,一种O(n^2)的动态规划算法,一种是O(nlogn)的二分查找算法。 动态规划算法 具体思路 : 设置一个dp[i],代表以a[i]为末位的最长递增子序列的长度。其状态转换方程为 dp[i] ...原创 2019-03-19 12:07:11 · 227 阅读 · 0 评论