![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 70
在努力的小强
这个作者很懒,什么都没留下…
展开
-
动态规划——最后一块石头的重量|| #JAVA
这道题的思路其实和分割等和子集的思路非常相似实质是01背包,还是尽可能的去装满石头总和的一半的背包,就是说我们题目是要求所剩的石头最少,就极端情况就是没有剩下的石头,因为是两块石头去磨,所以只要能找到凑出石头总重一半的石头我们就有认为是可以的,target = (石头总重)/ 2,我们向下取整,因为会有不能均匀分到一半的情况这时我们只需要去尽量放满这target容量大小的背包就可以了,剩下的就是两部分内容的差值就是我们剩下最小的石头。组合 2 和 1,得到 1,所以数组转化为 [1,1,1],原创 2024-07-19 11:01:16 · 349 阅读 · 0 评论 -
动态规划——不同路径 II #JAVA
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格的左上角 (起始点在下图中标记为 “Start” )。1. 向右 -> 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右 -> 向右。3x3 网格的正中间有一个障碍物。网格中的障碍物和空位置分别用。从左上角到右下角一共有。原创 2024-07-18 15:44:32 · 381 阅读 · 1 评论 -
动态规划——不同路径 #JAVA
当 i>0 且 j>0 时,可以从 (i−1,j) 向下移动到达 (i,j) 或从 (i,j−1) 向右移动到达 (i,j),到达 (i,j) 的路径数目为到达 (i−1,j) 的路径数目与到达 (i,j−1) 的路径数目之和,因此动态规划的状态转移方程是 dp[i][j]=dp[i−1][j]+dp[i][j−1]。当 i=0 或 j=0 时,从 (0,0) 到达 (i,j) 的路径是唯一的,因此动态规划的边界情况是:当 i=0 或 j=0 时,dp[i][j]=1。1. 向右 -> 向下 -> 向下。原创 2024-07-18 13:53:52 · 1042 阅读 · 0 评论 -
动态规划——使用最小花费爬楼梯 #JAVA
首先这道题和LeetCode 70很像同样使用动态规划的思想,同样的先定好dp[]数组的含义,i表示第几个台阶,dp[i]则记录上到此台阶所需要的最小体力。再来推到递推公式,因为上到第i个台阶只能是通过它的前一个或者前两个台阶上来的所以dp[i] = dp[i - 1] + cost[ i - 1]或者 dp[i] = dp[i - 2] + cost[ i - 2]只要在两者之间选择小的一个就可以。最低花费方式是从 cost[0] 开始,逐个经过那些 1 ,跳过 cost[3] ,一共花费 6。原创 2024-07-18 13:24:07 · 356 阅读 · 0 评论 -
动态规划——爬楼梯 #JAVA
分析dp数组的含义是下标为n的数就是有n种爬法,每一层的爬法又能够通过前两层的爬法叠加,很好理解,因为每次只能爬 1 级或 2 级,所以 f(x) 只能从 f(x−1) 和 f(x−2) 转移过来。你有多少种不同的方法可以爬到楼顶呢?1. 1 阶 + 1 阶 + 1 阶。有两种方法可以爬到楼顶。1. 1 阶 + 1 阶。有三种方法可以爬到楼顶。2. 1 阶 + 2 阶。3. 2 阶 + 1 阶。原创 2024-07-18 11:50:54 · 205 阅读 · 0 评论 -
动态规划——斐波那契数列 #JAVA
然后再去分析递推公式,题目已经告诉了F(n) = F(n - 1) + F(n - 2),那么dp数组则是。答案需要取模 1e9+7(1000000007) ,如计算初始结果为:1000000008,请返回 1。这里的话肯定一维数组就可以了,并且通过题意分析到dp数组中下位为i的数就题目的F(n)下一步就是对于dp数组的初始化题目也以及告诉了F(0) = 0,F(1) = 1。F(n) = F(n - 1) + F(n - 2),其中 n > 1。开始,后面的每一项数字都是前面两项数字的和。原创 2024-07-18 11:21:19 · 433 阅读 · 0 评论