![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 80
slime_kirito
讨厌无力的自己
展开
-
最大连续子序列和(6种解决方法)
问题描述: 连续子序列最大和,其实就是求一个序列中连续的子序列中元素和最大的那个。 比如例如给定序列: { -2, 11, -4, 13, -5, -2 } 其最大连续子序列为{ 11, -4, 13 },最大和为20。=========================================转载 2015-03-02 11:08:25 · 2346 阅读 · 0 评论 -
滚动数组
使用范围:使用在递推或动态规划中作用:节约空间注意:时间上没什么优势举例1)作用在一维数组:普通方法:int d[]=new int[100];d[0]=1;d[1]=1;for(int i=2;i<100;i++){ d[i]=d[i-1]+d[i-2]}System.out.printf("%d",d[99]);上述转载 2015-08-19 14:51:19 · 316 阅读 · 0 评论 -
动态规划-最长公共子序列【LCS】
最长公共子序列 简称LCS问题描述给定两个序列X(x1,x2,x3…xm)和Y(y1, y2, y3…yn),求长度最大的公共子序列的长度。例如:1,5,2,6,8,7 和 2,3,5,6,9,8,4 的LCS为5,6,8(另一个解是2,6,8)dp[i][j]记录X[1~i]与Y[1~j] 的LCS 的长度状态转移方程:O(n*n)/*主要代原创 2015-08-19 14:43:47 · 351 阅读 · 0 评论 -
动态规划-最长上升子序列【LIS】
最长上升子序列 简称LIS1.问题描述给出一个序列a1,a2,a3,a4,a5,a6,a7....an,求它的一个子序列(设为s1,s2,...sn),使得这个子序列满足这样的性质,s1dp[i]:以ai结尾 的最长上升子序列状态转移方程:dp[i] = max{0, dp[j] | j 代码实现 O(n*(n/2)):dp[i] = max{0, d原创 2015-08-19 14:17:40 · 494 阅读 · 0 评论 -
各类背包问题
它是在1978年由Merkel和Hellman提出的。它的主要思路是假定某人拥有大量物品,重量各不同。此人通过秘密地选择一部分物品并将它们放到背包中来加密消息。背包中的物品中重量是公开的,所有可能的物品也是公开的,但背包中的物品是保密的。附加一定的限制条件,给出重量,而要列出可能的物品,在计算上是不可实现的。背包问题是熟知的不可计算问题,背包体制以其加密,解密速度快而其人注目。但是,大多数一次背包转载 2015-07-21 20:01:38 · 312 阅读 · 0 评论 -
最长公共子序列(LCS)
一、什么是最长公共子序列 什么是最长公共子序列呢?举个简单的例子吧,一个数列S,若分别是两个或多个已知序列的子序列,且是所有符合条件序列中最长的,则S称为已知序列的最长公共子序列。 举例如下,如:有两个随机数列,1 2 3 4 5 6 和 3 4 5 8 9,则它们的最长公共子序列便是:3 4 5。 一直不明白:最长公共子串和最原创 2015-03-03 11:40:46 · 450 阅读 · 0 评论 -
最长公共子序列(LCS)问题
一、什么是最长公共子序列 什么是最长公共子序列呢?举个简单的例子吧,一个数列S,若分别是两个或多个已知序列的子序列,且是所有符合条件序列中最长的,则S称为已知序列的最长公共子序列。 举例如下,如:有两个随机数列,1 2 3 4 5 6 和 3 4 5 8 9,则它们的最长公共子序列便是:3 4 5。 一直不明白:最长公共子串和最长公共子序列的区别。转载 2015-03-03 12:46:36 · 558 阅读 · 0 评论 -
[算法] 推荐阅读:从动态规划新手到专家
动态规划:从新手到专家Hawstein翻译前言我们遇到的问题中,有很大一部分可以用动态规划(简称DP)来解。 解决这类问题可以很大地提升你的能力与技巧,我会试着帮助你理解如何使用DP来解题。 这篇文章是基于实例展开来讲的,因为干巴巴的理论实在不好理解。注意:如果你对于其中某一节已经了解并且不想阅读它,没关系,直接跳过它即可。简介(入门)什么是动态规划,我转载 2015-03-02 14:58:09 · 544 阅读 · 0 评论 -
十个利用矩阵乘法解决的经典题目
先贴模板:矩阵乘法模板struct Matrix{ int row, col; LL m[MAXN][MAXN]; void init(int row, int col){ this->row = row;this->col = col; for (int i = 0; i < row; ++i) for (int j = 0; j < col; ++j)原创 2016-05-03 17:18:16 · 922 阅读 · 0 评论