
DP
文章平均质量分 61
动态规划题目
zxzxin
分享、总结 C++、Java、算法 等技术
展开
-
LeetCode - 486. Predict the Winner(排成一条线的纸牌博弈问题)
LeetCode-486. Predict the Winner(排成一条线的纸牌博弈问题)题意暴力递归解法动态规划解法 题目链接题意 给定一个表示分数的非负整数数组。 玩家1从数组任意一端拿取一个分数,随后玩家2继续从剩余数组任意一端拿取分数,然后玩家1拿,……。每次一个玩家只能拿取一个分数,分数被拿取之后不再可取。直到没有剩余分数可取时游戏结束。最终获得分...原创 2018-07-29 19:39:22 · 1452 阅读 · 0 评论 -
LeetCode - 268. Missing Number & 674. Longest Continuous Increasing Subsequence
LeetCode - 268. Missing Number & 674. Longest Continuous Increasing SubsequenceLeetCode - 268. Missing NumberLeetCode - 674. Longest Continuous Increasing SubsequenceLeetCode - 268. Missing...原创 2018-12-27 13:44:29 · 241 阅读 · 0 评论 -
Codeforces 217A & 580C & 189A & 368B
目录Codeforces - 217A - Ice Skating题目链接题目大意给你一个n,以及在坐标轴上的n个坐标(把这些坐标看做是一些岛), 一个人可以上、下、左、右的走,也就是说如果两个岛横坐标或者纵坐标相等,它们就可以相互到达,问你还需要添加多少个岛,可以使得任意两个岛可以相互到达。解析先把所有能相互到达的每个整体求出来,使用dfs求出连通分量的个数;然后需要添加的...原创 2018-12-24 11:29:02 · 330 阅读 · 0 评论 -
Codeforces - 1037C & 313B & 489C & 474D
目录Codeforces - 1037C - Equalize Codeforces - 1037C - Equalize题目链接题目大意就是给你两个字符串a、b, 都是二进制串01组成,要你用下面的两种方式把字符串a变成字符串b(b不能修改):交换a的两个索引i、j的值,花费 abs(i - j);将a的i位置翻转(0变1,1变0), 花费1;要你求最少的花费。解析...原创 2018-12-25 19:36:47 · 440 阅读 · 0 评论 -
TimusOJ - 1225.Flags & 1119.Metr & 1009.K-based Numbers (DP简单题)
TimusOJ - 1225.Flags & 1119.Metr & 1009.K-based Numbers (DP简单题)TimusOJ - 1225.FlagsTimusOJ - 1119.MetrTimusOJ - 1009.K-based NumbersTimusOJ - 1225.Flags题目链接题目给你三种颜色,输入n代表的是长方形数,向这些...原创 2019-01-10 21:14:13 · 279 阅读 · 0 评论 -
LeetCode - 664. Strange Printer(DP)
LeetCode - 664. Strange Printer(DP)题目链接题目解析递归思路:当前递归函数求解[i ~ j]范围的最小打印次数;则我们需要在[i, j )中寻找一个k,其中s[k] == s[j],此时[k ~ j]范围内的字符可以一次打印,所以这样可以优化,所以我们要去在所以的k && s[k] == s[j]中取一个最小的,然后去递归[i, k...原创 2019-01-10 23:11:47 · 348 阅读 · 0 评论 -
TimusOJ - 1146. Maximum Sum(子矩阵的最大累加和)
TimusOJ - 1146. Maximum Sum(子矩阵的最大累加和)题目链接题目解析首先,解这道题之前,先要知道求一维的最大子数组和LeetCode53和Hdu1003。解析:假设一个2行4列的矩阵如下:-2 3 -5 7 1 4 -1 -3如何求必须含有2行元素的子矩阵的最大累加和? 做法是将两列的元素累加,然后得到累加数组[-1, 7, -6, 4],然...原创 2019-01-05 20:58:25 · 431 阅读 · 0 评论 -
LeetCode - 678. Valid Parenthesis String (DP | 思维)
LeetCode - 678. Valid Parenthesis String (DP | 思维)DP思维题目链接题目解析这个题目有很多种解法。是一道练思维的好题。DP记忆化的思路:递归函数recur求[L, R]范围内的字符串是否可以构成解,答案是recur(0, n-1);递归终止条件是L == R,如果此时chs[L] == '*',则按照题目要求是返回tru...原创 2019-01-17 13:17:41 · 343 阅读 · 0 评论 -
LeetCode - 673. Number of Longest Increasing Subsequence(最长递增子序列的个数)
LeetCode - 673. Number of Longest Increasing Subsequence(最长递增子序列的个数)题目链接题目解析做这题之前先要知道求一个数组的最长递增子序列。做法:求出最长递增子序列的长度(max),可以用记忆化也可以递推;然后遍历数组,看以哪些数结尾的序列是最长序列,然后对每一个这样的序列进行递归处理,从后往前求以这个结尾的最长序列的个数...原创 2019-01-07 11:30:06 · 298 阅读 · 0 评论 -
Codeforces - 977F. Consecutive Subsequence( Map + DP) & 1097B. Petr and a Combination Lock(枚举)
Codeforces - 977F. Consecutive Subsequence( Map + DP) & 1097B. Petr and a Combination Lock(枚举)Codeforces - 977F. Consecutive Subsequence( Map + DP) Codeforces - 1097B. Petr and a Combination Lo...原创 2019-01-12 12:13:04 · 771 阅读 · 1 评论 -
Codeforces - 118D. Caesar's Legions | TimusOJ - 2018. The Debut Album (DP)
Codeforces - 118D. Caesar’s Legions | TimusOJ - 2018. The Debut Album (DP)Codeforces - 118D. Caesar’s LegionsTimusOJ - 2018. The Debut AlbumCodeforces - 118D. Caesar’s Legions题目链接题目给你四个数N1、N2...原创 2019-01-17 20:04:17 · 333 阅读 · 0 评论 -
Codeforces - 607B.Zuma (DP)
Codeforces - 607B.Zuma (DP)题目链接题目给你一个n和一个有n个元素的数组,你每次可以拿走一个连续的子串,如果这个串是回文串,则拿走的花费为1,然后剩下的连接起来,问你拿完整个串的最小花费。解析感觉和真正的祖玛游戏还是有点差别,或者说一开始有点小小的误解。这个题目说的是回文串的花费为1,所以我们是要尽可能的去找回文串。递归的思路:递归函数参数是串的两个端...原创 2019-01-24 10:32:56 · 370 阅读 · 0 评论 -
TimusOJ - 1353. Milliard Vasya's Function(DP)
TimusOJ - 1353. Milliard Vasya’s Function(DP)题目链接题目求1到109 ( [1, 109] )中各位数字之和为S的数有多少个;解析这个题目和LeetCode - 518. Coin Change 2非常的相似。递归(记忆化)的写法:总共需要9位数字,我们就去递归每一个位置可以累加0 ~ 9之间的数;递归终止条件就是当够了9个数字的时...原创 2019-01-08 22:33:45 · 254 阅读 · 0 评论 -
LeetCode - 221. Maximal Square(求最大的全是1的正方形)
LeetCode - 221. Maximal Square(求最大的全是1的正方形)暴力 (O(N^5))改进动态规划(O(N^3))优化动态规划(O(N^2))题目链接题目暴力 (O(N^5))暴力O(N) * O(M) * O(min(N , M)) * O(N) * O(M),也就是O(N^5),但是也能通过…枚举0 ~ n和0 ~ m,然后枚举这个范围内的所有正...原创 2019-01-09 14:55:30 · 647 阅读 · 0 评论 -
LeetCode - 688. Knight Probability in Chessboard (DP)
LeetCode - 688. Knight Probability in Chessboard (DP)题目链接题目解析思路:当前的步数以及当前的位置,可以由上一个可以走到当前位置的位置走到当前位置,如果没有越界,总共有8个这样的上一个位置。看题目中的例子:于是如果是递归求解:则当前递归层依赖的是上一层(k-1)的8种位置的方法数量的和;概率就是到第k层的时候的方法数 ...原创 2019-01-21 21:59:41 · 527 阅读 · 0 评论 -
51Nod-1006-最长公共子序列LCS 和 最长公众子串
51Nod-1006-最长公共子序列LCS 和 最长公众子串51Nod-1006-最长公共子序列LCS 最长公众子串51Nod-1006-最长公共子序列LCS题目链接题目就是输入两个字符串str1、str2,输出任意一个最长公共子序列。解析dp[i][j]代表的是 : 必须以str1[i]、str2[j]结尾的最长公共子序列,dp[i][j]来源:可能是dp[i-1][j...原创 2018-12-27 09:07:08 · 300 阅读 · 0 评论 -
LeetCode - 241. Different Ways to Add Parentheses(分治、dp)
LeetCode241-Different Ways to Add Parentheses(分治、dp)class Solution { private HashMap<String,List<Integer>>map; public List&a原创 2018-11-22 09:35:21 · 478 阅读 · 1 评论 -
LeetCode - 139. Word Break & Word BreakII (dp)
LeetCode139-Word Break & LeetCode140-Word BreakII (dp)class Solution { public boolean wordBreak(String s, List<String>原创 2018-10-22 11:19:58 · 362 阅读 · 0 评论 -
LeetCode - 518. Coin Change 2(零钱兑换 II)(换钱的方法数问题)
LeetCode-518. Coin Change 2(零钱兑换 II)(换钱的方法数问题)题意暴力递归解法记忆化搜索解法二维dp解法二维dp优化滚动数组优化空间O(n) 题目链接题意 给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。 例如 输入: amount = 5, coins = ...原创 2018-07-29 21:03:17 · 1880 阅读 · 2 评论 -
LeetCode - 354. Russian Doll Envelopes及最长上升子序列问题总结
LeetCode354-Russian Doll Envelopes及最长上升子序列问题总结最长上升子序列普通dp法最长上升子序列解的打印最长上升子序列NlogN法LeetCode354-Russian Doll Envelopes题解最长上升子序列普通dp法 生成长度为N的数组dp,dp[i]表示的是在以arr[i]这个数结尾的情况下,arr[0…i]中的最长递增子...原创 2018-07-26 17:52:13 · 965 阅读 · 0 评论 -
LeetCode - 64. Minimum Path Sum(最小路径和)
LeetCode-64-Minimum Path Sum最小路径和问题题目大意递归尝试版本记忆化搜索二维空间dp表滚动数组优化空间O(min{N,M})打印解 题目链接题目大意 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。 例如 : 输入: [1,3...原创 2018-07-26 20:45:16 · 2050 阅读 · 0 评论 -
LeetCode - 53. Maximum Subarray(最大子序和)(一维dp)
LeetCode-53. Maximum Subarray( 最大子序和)(一维dp)递归写法一维dp数组滚动优化 递归写法递归和动态规划永远是可以转换的,我们可以从数组的最后开始往前看,对于当前数nums[i],以这个nums[i]结尾的最大值一定是你前面的所有数求出一个最大的子序和(但是由于是子数组,所以必须是判断前一个数)+我自己(nums[i]),所以这是一个递归...原创 2018-08-18 11:27:22 · 1300 阅读 · 0 评论 -
LeetCode - 62. Unique Paths(不同的路径数量)(简单dp)
LeetCode-62. Unique Paths(不同的路径数量)(简单dp)递归(超时)记忆化二维dp空间优化 题目链接这个题目和最小路径和问题很类似。递归(超时)来到某个结点,因为只能往右边和下面走,所以一个位置[i,j]依赖的位置是[i-1,j]和[i,j-1]位置两个点之前的数量之和; 所以我们把[i,j]看做是终点的话就得出下面的递归关系。 如果不...原创 2018-08-18 15:05:39 · 2275 阅读 · 0 评论 -
LeetCode - 303. Range Sum Query - Immutable(简单dp或者线段树)
LeetCode-303. Range Sum Query - Immutable(简单dp)题目链接题目解析一维的动态规划,直接从左到右记录0~每个位置的和,然后递归sums[i] = sums[i-1] + nums[i],求出所有的sums,然后要求某个区间的和,就直接返回sums[j] - sums[i-1]即可,如果i = 0,就直接返回sums[j]。 ...原创 2018-08-26 14:40:08 · 250 阅读 · 0 评论 -
LeetCode - 174. Dungeon Game(地下城游戏)(dp)
LeetCode-174. Dungeon Game(地下城游戏)(dp)记忆化二维dp一维dp这种题目都是一个套路,先写出递归,然后改dp或者记忆化,类似的题目有LeetCode62和LeetCode64记忆化总共分为四中情况:第一种就是最左下角;第二种就是最后一行;第三种就是最后一列;第四种就是普通位置,依赖的位置是右边的和下面的;具体解释看下图:...原创 2018-08-22 16:33:23 · 614 阅读 · 0 评论 -
POJ - 2342. Anniversary party(员工的活跃度问题)(多叉树以及树形dp)
POJ2342Anniversary party(员工的活跃度问题)(多叉树以及树形dp)题目链接题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚会的总活跃指数最大。比如下面的两个例子: 解析:在一个结点no...原创 2018-08-17 16:48:45 · 794 阅读 · 0 评论 -
LeetCode - 72. Edit Distance(编辑距离问题)(三个依赖的滚动优化)
LeetCode-72. Edit Distance(编辑距离问题)(三个依赖的滚动优化)记忆化二维dp一维dpO(M)一维dpO(min(N,M))加强问题(ic,dc,rc)题目链接记忆化使用递归的解法: 从两个字符串的最后的位置开始考虑: 如果最后两个字符(i,j)相等,最后两个字符就不要配对,所以等于minDistance(s1[0..i-1]...原创 2018-08-26 00:22:28 · 1902 阅读 · 2 评论 -
Hdu - 2602. Bone Collector(01背包问题)
Hdu2602-Bone Collector(01背包问题)01背包递归写法(记忆化)二维dp一维dp01背包递归写法(记忆化)递归的思想就是: 我要计算的是从第0号物体到n-1号物体的最大重量;记录一个当前判断到i号物体时,已经选择的物体的容量curW;我的递归边界是如果判断到当前的物体大于我的背包容量了,这个物体就不能选,于是我之前如果假设选了的话我就要减掉这...原创 2018-09-08 16:50:55 · 379 阅读 · 0 评论 -
LeetCode - 63. Unique Paths II(有障碍物的不同路径)
LeetCode-63. Unique Paths II(有障碍物的不同路径)记忆化二维dp一维dp题目链接题目记忆化其实这类题目都是比较套路的,例如LeetCode62,就是一点点改造而已。 记忆化就是递归加上一个二维数组的记录: public int[][] map; public int uniquePathsWithOb...原创 2018-09-05 19:50:35 · 1241 阅读 · 0 评论 -
LeetCode - 312. Burst Balloons(DP)
LeetCode312-Burst Balloons(dp)递归写法二维dp题目链接题目递归这题递归本来用ArrayList写了一个,也是枚举删除的位置,递归后插入还原,但是那样不好记忆化,于是看了讨论区。。。答案有点分治的意思。。思路: (注意这里process函数(递归函数)求的是在[L,R]闭区间可以取的最大值)如果L > R,则区间无数,这是递归边界,返回0...原创 2018-10-14 21:13:58 · 349 阅读 · 0 评论 -
LeetCode - 152. Maximum Product Subarray(子数组最大累乘积)
LeetCode152-Maximum Product Subarray(子数组最大累乘积)一维dp滚动优化递归版本题目链接题目这题和LeetCode53类似。一维dp使用一个一维数组记录以每个位置结尾的最大累乘积,再使用一个res变量(记录结果),记录每一个位置结尾ends[i]的最大值。如何快速求出所有以i位置结尾(nums[i])的子数组的最大累乘积? 假设以nu...原创 2018-10-09 18:33:44 · 367 阅读 · 0 评论 -
LeetCode - 120. Traingle & Hdu - 2084. 数塔问题(简单dp)
LeetCode120-Traingle(类似数塔问题dp)递归dp题目链接class Solution { public int minimumTotal(List<List<Integer>> triangle) { if(triangle == null || triangle.size() == 0 || triangle原创 2018-10-19 09:01:45 · 918 阅读 · 0 评论 -
LeetCode - 91. Decode Ways & 639. Decode Ways II(DP)
LeetCode - 91. Decode Ways & 639. Decode Ways II(DP)LeetCode - 91. Decode WaysLeetCode - 639. Decode Ways IILeetCode - 91. Decode Ways题目链接题目解析class Solution { HashMap<String, Int...原创 2019-02-02 21:53:33 · 517 阅读 · 0 评论