![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
蔚蓝不远
这个作者很懒,什么都没留下…
展开
-
动态规划之最长回文子串
最长回文子串问题描述给出一个字符串S,求S的最长回文子串的长度样例输入PATZJUJZTACCBCC样例输出9dp[i][j]表示s[i]至s[j]所表示的子串是否是回文子串,是则为1,不是则为0动态转移方程:当s[i] == s[j]时,dp[i][j] = dp[i+1][j-1]当s[i] != s[j]时,dp[i][j] = 0#include <bits/stdc++.h>using namespace std;int main(){ cons原创 2020-10-13 19:21:47 · 177 阅读 · 0 评论 -
动态规划之最长公共子序列(LCS)
最长公共子序列(LCS)问题描述给定两个字符串(或数字序列)A和B,求一个字符串,使得这个字符串是A和B的最长公共部分(子序列可以不连续)样例输入sadstoryadminsorry样例输出6状态转移方程:当s1[i] == s2[j]时,dp[i][j] = dp[i-1][j-1] + 1当s1[i] != s2[j]时,dp[i][j] = max(dp[i-1][j], dp[i][j-1])#include <bits/stdc++.h>using name原创 2020-10-13 19:07:08 · 178 阅读 · 0 评论 -
动态规划之最长公共不下降子序列(LIS)
最长公共不下降子序列(LIS)问题描述在一个数字数列中,找到一个最长的子序列(可以不连续),使得这个子序列是不下降(非递减)的。样例输入71 2 3 -1 -2 7 9样例输出5动态转移方程:dp[i] = max{1, dp[j] + 1}#include <bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; int s[n]; for(int i = 0; i < n;原创 2020-10-13 18:46:40 · 223 阅读 · 0 评论 -
动态规划之最大连续子序列和
最大连续子序列和问题描述给定一个数字序列A1,A2,…,An,求i, j(1 <= i <= j <= n,使得Ai + … + Aj最大,输出这个最大和样例输入6-2 11 -4 13 -5 -2样例输出20解释:11 + (-4) + 13 = 20动态转移方程:dp[i] = max(dp[i] + dp[i-1], dp[i])#include <bits/stdc++.h>using namespace std;int main(){ i原创 2020-10-13 18:32:23 · 287 阅读 · 0 评论 -
一文学会解决动态规划问题
动态规划是一种用来解决一类最优化问题的算法思想。简单来说,动态规划将一个复杂的问题分解成若干个子问题,通过综合子问题的最优解来得到原问题的最优解。需要注意的是,动态规划会将每个求解过的子问题的解记录下来,这样当下一次碰到同样的子问题时,就可以直接使用之前记录的结果,而不是重复计算。一般来说,使用递归或者递推的写法来实现动态规划。其中,递归在此处又称之为记忆化搜索。1. 动态规划的递归写法理解动态规划是如何记录子问题的解,来避免下次遇到相同的子问题时的重复计算的我们以斐波那契数列为例子斐波那契数列原创 2020-10-13 17:57:42 · 248 阅读 · 0 评论