动态规划
unomit
我所思,我所想呀
展开
-
硬币找零——动态规划解法
动态规划和备忘录的比较:动态规划解法其实和递归备忘录解法很相似,也有点不太相同。动态规划使用dp数组来记录状态。递归备忘录使用备忘录来记录已经计算过的子问题。动态规划是自底向上,递归是自顶向下的。问题的描述:就是给定一个钱数n,然后给定一个k种硬币然后输入硬币的面值,然后求出最少的硬币来凑出这个钱数例如:11块有三种硬币 1 2 5那么最少数就是 3(两个5和一个1)解决代码:#include <iostream>#include <vector>usi原创 2020-12-04 17:05:16 · 198 阅读 · 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 · 457 阅读 · 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 · 1812 阅读 · 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 · 101 阅读 · 0 评论 -
动态规划--三角形问题
这是动态规划很经典的一个问题就是一个三角形类似这样: 23 4输出顶点的到底部的最大和,限制条件元素只能左下或者右下走例如:上述这个三角形,这个输出就是6解决方法:动态规划定义的dp数组的小只需要和最后一行的元素个数相等即可。例如最后一行输入的数据最后一行是10个元素,我就只需要定义一个dp[10]。首先我们可以用一个二维数组来存储这个三角形那么第一行就是一个元素,第n行就是n个元素然后我们遍历每一行的时候就用dp数组来存储本行的最大值,例如最后一行的元素它们本身,然后倒数第原创 2020-12-02 17:55:30 · 371 阅读 · 0 评论 -
计蒜客NOIP2008——动态规划
上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。游戏规则是这样的:n 个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演一个节目。聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了 m 次以后,又回到小蛮手里。两种传球的方法被视作不同的方法,当且仅当这两种方法中,接原创 2020-12-01 21:11:58 · 126 阅读 · 0 评论