动态规划
动态规划学习的笔记
Perrysky
喜欢编程
展开
-
Leetcode746.使用最小花费爬楼梯(简单)动态规划 贪心 C++
题目描述:746. 使用最小花费爬楼梯数组的每个索引作为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 costi。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例 1:输入: cost = [10, 15, 20]输出: 15解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。示例 2:输入: cost = [1,原创 2020-12-22 21:30:04 · 212 阅读 · 0 评论 -
Leetcode96.不同的二叉搜索树(中等)C++ 递归 动态规划
题目描述:96. 不同的二叉搜索树给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树:1 3 3 2 1\ / / / \ 3 2 1 1 3 2/ / \ 2 1 2原创 2020-12-17 22:24:53 · 169 阅读 · 0 评论 -
动态规划问题的学习思路总结
动态规划问题的学习思路总结1、由斐波那契数列引入重叠子问题(斐波那契数列严格来说不是动态规划问题)1)暴力递归int fib(int n){ if( n ==1 || n == 2) return 1; return fib(n-1) + fib(n-2);}时间复杂度为:O(2^n)画出递归树:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fpsBQRSE-1600873191052)(C:\Users\Perry\AppD原创 2020-09-23 23:01:23 · 247 阅读 · 0 评论 -
贪心算法、分治算法和动态规划的区别
贪心算法、分治算法和动态规划的区别(1)分治法(divide and conquer method)将原问题划分成若干个规模较小而结构与原问题相似的子问题,递归的解决这些子问题,然后再合其结果,就得到原问题的解。特征:该问题的规模缩小到一定的程度就很容易解决该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质利用该问题分解出的子问题的解可以合并为该问题的解;该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题(2)动态规划(dynamic progra原创 2020-09-23 22:54:15 · 8135 阅读 · 0 评论 -
Leetcode 面试题 08.11 硬币 (中等) 动态规划(完全背包问题)
题目描述:硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)示例1:输入: n = 5输出:2解释: 有两种方式可以凑成总金额:5=55=1+1+1+1+1示例2:输入: n = 10输出:4解释: 有四种方式可以凑成总金额:10=1010=5+510=...原创 2020-04-30 18:30:53 · 286 阅读 · 0 评论 -
Leetcode 72. 编辑距离(困难) 动态规划
题目描述:给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符示例 1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')...原创 2020-04-09 10:12:17 · 170 阅读 · 0 评论 -
Leetcode 1143. 最长公共子序列(中等) 动态规划
题目描述:给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。...原创 2020-04-08 17:39:25 · 268 阅读 · 0 评论 -
Leetcode 416. 分割等和子集 (中等) 动态规划 01 背包的变体
题目描述:给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: f...原创 2020-03-31 23:51:39 · 384 阅读 · 0 评论 -
Leetcode 518. 零钱兑换 II(中等) 动态规划
题目描述:给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1示例 2:输入: amount = 3, coins = [2]输出: ...原创 2020-03-26 23:33:14 · 205 阅读 · 0 评论 -
Leetcode 70. 爬楼梯 (简单) 动态规划
题目描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶...原创 2020-03-26 21:56:16 · 162 阅读 · 0 评论 -
Leetcode 322. 零钱兑换(中等)动态规划
题目描述:给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1...原创 2020-03-26 16:41:37 · 237 阅读 · 0 评论 -
Leetcode. 打家劫舍II(中等)动态规划
题目描述:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [2,3,2]输出:...原创 2020-03-26 00:15:33 · 112 阅读 · 0 评论 -
Leetcode 198.打家劫舍(简单) 动态规划
题目描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1)...原创 2020-03-25 12:52:44 · 182 阅读 · 0 评论 -
动态规划问题(2) 之 由凑零钱认识最优子结构
由凑零钱问题认识 最优子结构问题描述:有k种⾯值的硬币,⾯值分别为 c1, c2...ck,每种硬 币的数量⽆限,再给⼀个总⾦额 amount,问你最少需要⼏枚硬币凑出这个⾦额,如果不可能凑出,算法返回 -1。如:k = 3,⾯值分别为1,2,5,总⾦额amount = 11 。那么最少需要3枚硬币凑出,即11= 5 + 5 + 1。1、暴力递归这是一个动态规划的问题,其子问题...原创 2020-03-24 22:06:33 · 863 阅读 · 0 评论 -
动态规划问题(1) 之 斐波那契数列
动态规划问题的学习思路总结1、由斐波那契数列引入重叠子问题(斐波那契数列严格来说不是动态规划问题)1)暴力递归int fib(int n){ if( n ==1 || n == 2) return 1; return fib(n-1) + fib(n-2);}时间复杂度为:O(2^n)画出递归树:分析:因为计算fib(20),就需要...原创 2020-03-24 09:24:38 · 641 阅读 · 0 评论