DP
Lilyan_blog
这个作者很懒,什么都没留下…
展开
-
DP经典问题——最大子段和
1.问题描述:最大子段和是一个经典的DP问题。比如给定一个序列: 2, -1 , 3 , -5 , 3可以推测出最大子段和为 2 - 1 + 3 = 4题目要求输入一段序列,输出最大的子段和。2.算法分析:什么是子段和?就是在整个序列的子区间中最大的和。我们首先要找到这个问题的状态转移方程。如何设计状态?我们可以发现一个问题,我们可以将每一个子区间的和算出来。比如我们使用dp...原创 2019-02-14 19:11:33 · 2618 阅读 · 0 评论 -
杨辉三角——DP入门找规律
1.问题描述:2.找规律:我们可以发现如果用一个二维数组表示杨辉三角,如下11 11 2 11 3 3 11 4 6 4 1我们可以发现每一行都有对应的n个数,而除了第一行外,每一行的第一个数和最后一个数都为一,其中间的数可以为上一个数 + 左斜上方的数字。比如f[1][1] = 1,f[2][1] = 1,f[2][2] = 1.f[3][1] = 1,f[3][2] ...原创 2019-02-12 20:17:31 · 878 阅读 · 0 评论 -
DP经典问题——马过河卒
1.问题描述:2.算法分析:f[0][0] = 1;for (int i = 0;i <= n; ++i) { for (int j = 0; j <= m; ++j) { if (i != 0) { f[i][j] = f[i][j] + f[i-1][j]; } if (j != 0) { ...原创 2019-02-13 19:28:48 · 449 阅读 · 1 评论 -
DP入门——硬币问题
1.问题描述:硬币问题是比较古老而又经典的问题,即给定需要凑的硬币,给定几种面值的硬币,问最少所需要的硬币个数凑成。比如 给定15 硬币面值为1 ,5,11三个面值即输入 15输出为最少的硬币个数:32.算法分析:其实硬币问题也可以算是贪心问题,比如给定面值为100 ,50,10,1的面值,我们给定666,如果凑666的话,我们可以从大的凑,再从小的凑,比如666 = 6 * 10...原创 2019-02-14 14:30:37 · 2886 阅读 · 2 评论 -
DP经典问题LIS——最长上升子序列
1.问题描述:2.算法分析:因为是初学,只学习了O(N^2)的算法复杂度。最后,我们将dp数组的最大值是最长上升子序列的长度。推荐一篇文章包含了O(nlogn)的LIS算法。LIS推荐3.源代码:#include <iostream>#include <cstring>using namespace std;int dp[101], a[101],...原创 2019-02-20 20:06:01 · 318 阅读 · 0 评论