动态规划
动规
每天都要吃肉肉(●'◡'●)
绝不妄自菲薄
展开
-
【2011】求三个字符串的最大子串
问题描述: 输入3个子串, 输出这3个子串的最大公共子串 样例输入: abcd acb abc ab #include<cstdio> #include<iostream> #include<map> #include<vector> #include<cstring> #include<string> #include<algorithm> using namespace std; const int ma.原创 2022-03-13 12:00:53 · 221 阅读 · 0 评论 -
编辑距离(双序列)
经动态规划:编辑距离 #include<iostream> #include<string> #include<algorithm> using namespace std; const int maxn = 110; int dp[maxn][maxn]; int main() { string s1, s2; cin >> s1 >> s2; for (int i = 1; i < s1.length()...原创 2022-03-10 17:23:43 · 415 阅读 · 0 评论 -
信封嵌套(最长递增子序列变种)
题目描述 给n个信封的长度和宽度。如果信封A的长和宽都小于信封B,那么信封A可以放到信封B里,请求出信封最多可以嵌套多少层。 输入描述: 输出包含多行,第一行包括一个整数,代表信封的个数n(1≤n≤10e5)。接下来n行,每行两个整数li和wi,代表信封的长度和宽度(−1e9≤li,wi≤1e9)。 输出描述: 输出包括一行,代表信封最多嵌套多少层。 输入 9 3 4 2 3 4 5 1 3 2 2 3 6 1 2 3 2 2 4 输出 4 先对宽度w进行升序排序,如果遇到w相同的情况,.原创 2022-03-09 23:12:50 · 157 阅读 · 0 评论 -
最长公共子序列(二维序列)
给你输入两个字符串s1和s2,请你找出他们俩的最长公共子序列,返回这个子序列的长度。 比如说输入s1 = "zabcde", s2 = "acez",它俩的最长公共子序列是lcs = "ace",长度为 3,所以算法返回 3 递归 dp函数的定义是:dp(s1, i, s2, j)计算s1[i..]和s2[j..]的最长公共子序列长度 明确选择:具体到每一个字符,思考每个字符该做什么 还有一个小的优化,情况三「s1[i]和s2[j]都不在 lcs 中」其实可以直接忽略 base case:i.原创 2022-03-09 22:44:02 · 594 阅读 · 0 评论 -
【2018】骨牌
题目: 有2*n 的地板,用1*2和 2*1 的骨牌进行铺地板。问共有多少种情况。结果对 999983 取余,1<=n<=10000 。 输入: 6 输出: 13 #include<iostream> using namespace std; const int maxn = 11000; int main() { int dp[maxn] = {}; int n; cin >> n; dp[1] = 1; dp[2] = 2; ...原创 2022-03-08 12:08:22 · 148 阅读 · 0 评论 -
【动态规划】最长上升子序列(序列问题)
给定一个无序的整数数组,找到其中最长上升子序列长度。 输入: 8 10 9 2 5 3 7 101 18 输出: 4 明确dp含义:dp[i]表示以nums[i]这个数结尾的最长递增子序列的长度 明确选择:假设dp[0...i-1]都已经被算出来了,然后问自己:怎么通过这些结果算出dp[i](数学归纳思想) 明确 base case:dp[i]初始值为 1,因为以nums[i]结尾的最长递增子序列起码要包含它自己 #include<iostream> #in...原创 2022-03-03 17:44:49 · 363 阅读 · 0 评论 -
【动态规划】最长子数列和(序列问题)
明确dp数组:以nums[i]结尾的「最大的子数组和」为dp[i] 明确选择:dp[i]有两种「选择」,要么与前面的相邻子数组连接,形成一个和更大的子数组;要么不与前面的子数组连接,自成一派,自己作为一个子数组 明确base case:dp[i]初始值为 num[i] #include<iostream> #include<algorithm> using namespace std; const int maxn=110; int main() { int n, n...原创 2022-03-03 19:01:20 · 622 阅读 · 0 评论 -
【动态规划入门】斐波拉契
动态规划 动态规划问题的一般形式就是求最值,核心问题是穷举。因为要求最值,肯定要把所有可行的答案穷举出来,然后在其中找最值。动态规划的穷举有点特别,因为这类问题存在「重叠子问题」,如果暴力穷举的话效率会极其低下,所以需要「备忘录」或者「DP table」来优化穷举过程,避免不必要的计算。而且,动态规划问题一定会具备「最优子结构」。要符合「最优子结构」,子问题间必须互相独立。 思维框架: 明确「状态」 -> 定义 dp 数组/函数的含义 -> 明确「选择」-> 明确 base原创 2022-02-23 16:32:46 · 77 阅读 · 0 评论 -
【动态规划】换零钱问题
题目:给你k种面值的硬币,面值分别为c1, c2 ... ck,每种硬币的数量无限,再给一个总金额amount,问你最少需要几枚硬币凑出这个金额,如果不可能凑出,算法返回 -1 。原创 2022-03-02 21:02:27 · 560 阅读 · 0 评论