动态规划
unomit
我所思,我所想呀
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
硬币找零——动态规划解法
动态规划和备忘录的比较: 动态规划解法其实和递归备忘录解法很相似,也有点不太相同。 动态规划使用dp数组来记录状态。递归备忘录使用备忘录来记录已经计算过的子问题。 动态规划是自底向上,递归是自顶向下的。 问题的描述: 就是给定一个钱数n,然后给定一个k种硬币 然后输入硬币的面值,然后求出最少的硬币来凑出这个钱数 例如:11块 有三种硬币 1 2 5 那么最少数就是 3(两个5和一个1) 解决代码: #include <iostream> #include <vector> usi原创 2020-12-04 17:05:16 · 307 阅读 · 0 评论 -
硬币找零——递归备忘录解法
问题很常见吧!就是给定一个钱数n,然后给定一个k种硬币 然后输入硬币的面值,然后求出最少的硬币来凑出这个钱数 例如:11块 有三种硬币 1 2 5 那么最少数就是 3(两个5和一个1) #include <iostream> #include <algorithm> #include <vector> #include <cstring> using namespace std; int dp(int n,vector<int> &coin原创 2020-12-04 16:33:20 · 634 阅读 · 2 评论 -
斐波那契数列——递归备忘录解法(简单理解)
1.如果让我们递归解决,我们通常使用这一段代码来解决斐波那契数列问题 int fib(int n){ if(n==1 || n==2) return 1; else return fib(n-1) + fib(n-2); } 确实简单又好懂,可是这段代码细思极恐,时间复杂度是指数级的O(2n)。这可了不得。 那么为什么它的时间复杂度这么高呢? 我们画出递归树 #mermaid-svg-Prlnr0BlDY1omGDf .label{font-family:'trebuchet ms', verdan原创 2020-12-03 21:00:54 · 2154 阅读 · 2 评论 -
Leetcode-5 动态规划解最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。 示例 2: 输入: “cbbd” 输出: “bb” 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-palindromic-substring 解决方法: 我这里我使用的是动态规划可能时间复杂度O(n2)有点大,但是我是正在做这个。 我们想到一个串是否原创 2020-12-02 21:28:45 · 242 阅读 · 0 评论 -
动态规划--三角形问题
这是动态规划很经典的一个问题 就是一个三角形类似这样: 2 3 4 输出顶点的到底部的最大和,限制条件元素只能左下或者右下走 例如:上述这个三角形,这个输出就是6 解决方法:动态规划 定义的dp数组的小只需要和最后一行的元素个数相等即可。例如最后一行输入的数据最后一行是10个元素,我就只需要定义一个dp[10]。 首先我们可以用一个二维数组来存储这个三角形 那么第一行就是一个元素,第n行就是n个元素 然后我们遍历每一行的时候就用dp数组来存储本行的最大值,例如最后一行的元素它们本身,然后倒数第原创 2020-12-02 17:55:30 · 516 阅读 · 0 评论 -
计蒜客NOIP2008——动态规划
上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。 游戏规则是这样的:n 个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演一个节目。 聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了 m 次以后,又回到小蛮手里。两种传球的方法被视作不同的方法,当且仅当这两种方法中,接原创 2020-12-01 21:11:58 · 258 阅读 · 0 评论
分享