dp
文章平均质量分 55
dp
宁皇说java
大专文学专业在读,干过工地和外卖,觉得还是编程香,目前研究方向:分布式微服务,检索引擎,数据仓库
展开
-
leetcode. 不同的二叉搜索树(计数dp)
思路:● 总共分为n种类别(n个作为二叉搜索树的根结点,只需分别求出n个结点对应的种数求和即可)● 题目求的是种数,类似于计数型的动态规划,利用二叉搜索树的性质来确定dp方程,以及状态转移的条件例如:由转移方程确定初始值应为 dp[0]=1,dp[1]=1 且递推要从dp[2]开始递推class Solution { public int numTrees(int n) { int[] dp=new int[n+1]; dp[0]=1; ..原创 2022-03-19 14:24:47 · 553 阅读 · 0 评论 -
leetcode-解码方法(计数dp)
思路:● 动态规划 的第一步即为 确定状态,记dp[i] 为到第i+1位时的解码方法总数● 最后一步 : 最后通过递推即可得到dp[s.length()] 即为结果● 边界处理: 初始化dp[0]=1,dp[1] 可由dp[0]推导注意:此题求解的是解码的方法数,当我们到i位时,如果是直接解码当前i位的数作为1次解码的方法时,实际上和之前的解码方式等价,无需再对解码总数加一注意处理前面为前导零的情况class Solution { public int numDecoding..原创 2022-03-19 10:34:00 · 882 阅读 · 0 评论 -
leetcode300.最长递增子序列
题目描述思路最长的递增子序列可以抽象为由多个最优的子结构组成,例如到第j个的最长递增的子序列肯定大于或者等于到比j小的的最长递增子序列这样我们就有了递推的思路,依次将最优子结构累加起来,就得到了整个序列的最长递增子序列以当前元素作为右边界,从0开始,若比当前数大,跳过,若小则将当前坐标的dp值与遍历下标的dp值加一再比较,选取出最优的解确定方程: dp[i]=Math.max(dp[i],dp[j]+1);确定初状态:dp[i] =1代码class Solution { pu原创 2021-11-23 16:37:40 · 208 阅读 · 0 评论 -
第39级台阶(递归+dp)
题目思路这题看起来像兔子数列,但题目说第一步先迈左脚,最后一步是右脚,说明,走楼梯的次数为偶数模拟dp过程,观察哪些解不满足 /* 1 1 2 (1,1) (2) 3 (1,1,1) (1,2) (2,1) 4 (1,1,1,1) (2,2) (1,2,1) (2,1,1) (1,1,2) 5 (1,1,2,1) (1,2,1,1) (2,1,1,1原创 2021-11-22 09:31:31 · 752 阅读 · 1 评论 -
leetcode239. 滑动窗口最大值(困难)
题目思路:滑动窗口的模板 for(int right=0;right<nums.length;right++){ //获取left左边界 int left=right-k+1; //这时滑动窗口已形成可以将当前滑窗的最大值,队首添加到集合 if(right+1>=k){ } }窗口每滑动一次,相当于队列原创 2021-11-22 08:53:05 · 84 阅读 · 0 评论 -
leetcode375. 猜数字大小 II (区间dp)
题目思路:-----分析:猜数字的过程中需满足确保获胜且最小现金无论猜那个数都得满足1. 中的条件,于是不能使用二分,我们必须对所有情况进行决策确定最优子结构:当只有两个数时,选取两个数都可确保获胜,但选小的那个,能满足最小现金将最优子结构状态转移至全局,在1~n中选取一个数,两边都得是最优子结构,再在子结构中选取最优解确定状态转移方程dp[i][j]=Math.min(dp[i][j],k+Math.max(dp[i][k-1],dp[k+1][j]));-----注意:通过原创 2021-11-22 08:54:49 · 319 阅读 · 0 评论 -
走方格java
10、问题描述 小蓝在一个 n 行 m 列的方格图中玩一个游戏。 开始时,小蓝站在方格图的左上角,即第 1 行第 1 列。 小蓝可以在方格图上走动,走动时,如果当前在第 r 行第 c 列,他不能走到行号比 r 小的行,也不能走到列号比 c 小的列。同时,他一步走的直线距离不超过3。 小蓝最终要走到第 n 行第 m 列。 在图中,有的位置有奖励,走上去即可获得,有的位置有惩罚,走上去就要接受惩罚。奖励和惩罚最终抽象成一个权值,奖励为正,惩罚为负。 小蓝希望,从第 1 行第 1 列走到第原创 2021-04-10 21:00:02 · 370 阅读 · 0 评论 -
线性DP(java)(计数型动态规划)
计数型动态规划类型特点例题1题1代码题二链接类型特点线性DP一般是用来解决以某种规律走迷宫,或最短路径权值的问题其实也是按模板套(如果不清楚模板,建议大家先看上一篇我的有关动态规划的博客点此跳转,如果还想了解另一类动态规划问题可以看我的这篇文章决策型动态规划)下面我将展示两个例题来演示这类动态规划问题例题1p1216 数字三角形题目描述观察下面的数字金字塔。写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。原创 2021-04-10 20:24:39 · 813 阅读 · 0 评论 -
决策型动态规划(0/1背包类)
决策型动态规划类型特点例题代码实现类型特点对于0/1背包问题大家都不陌生即对于当前背包而言,拿与不拿都与前一次背包中装有的物品价值有关,我们将类似于0/1背包问题的动态规划划分为决策型动态规划即当前子问题有多种情况处理,且多种情况中又有不同的处理方式一般此类的转移方程形式都为dp[i][j]=Math.min/max(dp[i-1][j],dp[i-1][j-1];dp[i][k]=Math.min/max(dp[i-1][k],dp[i-1][k-1];max/min=Math.min/原创 2021-04-10 16:50:45 · 138 阅读 · 1 评论 -
动态规划经典例题(最长回文子串)
最长回文子串回忆一下动态规划题目描述思路动态规划代码动态规划注意事项暴力代码回忆一下动态规划我的理解就是动态规划实际上就是递推,他的时间复杂度一般比暴力法,递归法都要低,原因是因为动态规划是利用记忆好的历史数据,(不重复记忆)并使用下面我将动态规划的算法思路,随解题过程来梳理回亿题目描述给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例原创 2021-04-10 10:29:27 · 239 阅读 · 0 评论 -
Java_B_Province测试次数
测试次数题目初识DP(动态规划)DP的解题思路思路分析代码如何思考此类类似问题题目星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通。x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试。塔的每一层高度都是一样的,与地球上稍有不同的是,他们的第一层不是地面,而是相当于我们的2楼。如果手机从第7层扔下去没摔坏,但第8层摔坏了,则手机耐摔指数=7。特别地,如果手机原创 2021-03-29 21:29:14 · 108 阅读 · 0 评论