动态规划
文章平均质量分 70
少๑渊
可接课设,详情私聊
展开
-
暴力递归经典问题
一、前言暴力递归延伸出了很多常见的算法:动态规划、贪心、回溯等。本篇文章将从它们的基本思想——递归入手,解决一些经典问题。二、题目1、汉诺塔问题相信大家都玩过汉诺塔,简介如下:初始给定三根柱子和一个从上到下依次增大的圆盘堆,初始时圆盘堆放在第一个柱子上,请你给出这些圆盘通过中间柱子为中介,最终达到最后一个柱子所需要的最优路径。(条件是一次只可以移动一个圆盘,并且小圆盘必须放在大圆盘上面。)分析:这类的题目路径极为...原创 2022-01-29 13:47:33 · 1024 阅读 · 0 评论 -
剑指 Offer 14.剪绳子(动态规划、数学分析)
一、题目内容二、题目分析 这道题目讲道理,我看到的第一眼就是动态规划,但是后来提交之后,发现还有大佬考虑用数学分析得出精简解法,在这里我也会一 一阐述。 对于动态规划而言,按照老套路,首先定义dp数组,含义明了,定义长度为n+1的dp数组,其中dp[i]代表长度为i的绳子的最大乘积。 其次,我们寻找初始条件,简单分析就可以得到,dp[2]=1,dp[1]=1(虽然题目告诉我们n>=2,但是设置dp[1]有利于接下来的计算...原创 2021-12-01 17:16:31 · 3181 阅读 · 0 评论 -
力扣第63题:不同路径2(动态规划回顾)
一、题目内容二、题目分析 这道题目和我之前写过的一道迷路的机器人很像,不同点在于那题需要输出路径但是无障碍物,这题只需要找出路径个数,但是存在障碍物。既然是动态规划那么还是通过设置dp开始,dp的大小就是网格的长宽。 动态规划的第一步就是确定dp的含义与大小,dp[i][j]的含义就是机器人从(0,0)出发,到达i,j所存在的路径数,那我们最终返回的就是dp[m-1][n-1]了。int m=obstacleGrid.length;in...原创 2021-11-05 20:31:33 · 241 阅读 · 0 评论 -
力扣第279题:完全平方数(BFS和动态规划)
一、题目内容二、题目分析 BFS:public int numSquares(int n) { //BFS需要使用队列 Queue<Integer> queue=new LinkedList<>(); //判断是否计算过,避免重复计算 Set<Integer> visited=new HashSet<>(); queue.offer(0); visited.add(0); //记录完全平方...原创 2021-10-26 09:43:19 · 263 阅读 · 0 评论 -
力扣第494题:目标和(DFS,动态规划)
一、题目内容二、DFS做法 //记录解法数量 int count=0; public int findTargetSumWays(int[] nums, int target) { dfs(nums,target,0); return count; } private void dfs(int[] nums, int target,int index) { //如果当前树的深度等于nums数组的长...原创 2021-10-25 20:14:39 · 139 阅读 · 0 评论 -
力扣第139题:单词拆分(DFS,BFS,动态规划)
一、题目内容二、题目分析 对于这道题目我们首先要从头开始判断,一直到字符串结束为止。如下图一般,从0开始,读取c,发现并不在wordDict中,就继续读取a,直到读取到s之后,发现现在的字符串是cats,正好在给定的wordDict中,那么就从a开始,进行递归,递归的出口是当前的字符的个数是否等于给定字符串的长度,如果结果为是,就返回true。 那么我们将会得到这样一串代码public boolean dfs(String s, Li...原创 2021-10-24 21:49:31 · 493 阅读 · 0 评论 -
力扣第42题:接雨水(Java)
一、前言 这应该是最近的最后一道动态规划题了,所以我也特地挑了一道很有意思很烧脑的一道题。代码实现非常简单,看懂之后我相信会对大家有所帮助。二、题目描述三、题目分析 这个题目乍一看真的很吓人,因为是动态规划,起初你一定会想到状态转移方程,但是突然发现无从下手,这正是这题有意思的地方。我们知道,如果有个区域可以储存水,那水的高度肯定跟左右两边最高的那个边框有关,并且水的高度是边框中小的那个,就如上图那个T型一般。 那我们好像...原创 2021-10-13 16:51:45 · 204 阅读 · 3 评论 -
力扣第1278题:分割回文串③(Java)——阿里2021.4.12笔试第二题
一、前言 前面说了,从今天开始写一些比较难的题目,那么今天就来挑战回文串啦。回文串的题目还是难度标识都是困难,今天这道题目确实也没有百分百独立做出,但是经过我写完后的思考,我还是想把我的看法罗列一下。二、题目内容三、题目分析 读一下题目,发现它让我们解决的是最少分割产生回文子串的问题,因为是用动态规划解决,所以第一步还是为了确定状态转移方程的形式。经过这几天的刷题,很容易就知道dp[i][j]描述的是前i个数分割成j个数所产生的最小划分。那么dp就...原创 2021-10-12 11:32:32 · 221 阅读 · 2 评论 -
力扣第1035题:不相交的线、第1049题:动态规划解最后一块石头的重量(Java)
一、前言 今天很例外哈,做了两题,是因为我觉得第一题题型前两天遇见过,所以有些熟悉,很快就写出来了,然后就想着多写一题,结果第二题还是挺常规的,那今天就这两题吧,开始。二、题目描述(1035)三、题目分析这道题乍一看挺吓人的,因为要考虑到图形化的线段相交问题,但是其实却不难,因为只要将dp的前一种情况,最基础的情况考虑清楚了,那么dp后面的公式就很容易得出,那么也就不会错了。 这个题目很容易看出来,用一个二维数组dp[i...原创 2021-10-11 20:24:34 · 133 阅读 · 2 评论 -
力扣第1139题:最大的以1为边界的正方形(Java)
一、前言 今天依然是动态规划的题,老实说,今天的题目不是特别难,但是按照安排,还是照例写一份博客督促自己完成每日任务二、题目描述三、题目分析 这个题目最初的时候,我打算从最中心处看起,逐渐向外扩散,但是后来发现我想的简单了,经过一番折腾,我尽可能的将思路清晰的讲出来。 首先,因为是动态规划专题,所以重点在于状态转移方程的构建,那么就需要明确dp的含义,如果dp是一个二维数组dp[i][j],那么如何表示相邻正方形的关系呢?如果dp...原创 2021-10-10 14:18:36 · 188 阅读 · 4 评论 -
力扣第416题:动态规划解分割等和子集(Java)
一、前言动态规划是算法中一个非常重要的部分,它可以代替回溯算法等解决问题,而且只要合理的得出状态转移方程,此类题目一般都可以较为简单的写出来,但是关键点就在于如何构造出状态转移方程。最近更新的这些题目都是我在力扣刷题是觉得较好的题目,希望和大家一起分享。二、题目描述三、题目分析 我觉得在明确知道这题可以用动态规划解决的话,首先应该思考如何构造出状态转移方程。首先我们的目的是将数组分为相等的两份,那么如果数组和为奇数,则直接返回falseint sum=...原创 2021-10-09 19:40:45 · 494 阅读 · 3 评论