![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
adolph_jun
这个作者很懒,什么都没留下…
展开
-
最大子序列和
原文链接 问题: 给定一整数序列A1, A2,... An (可能有负数),求A1~An的一个子序列Ai~Aj,使得Ai到Aj的和最大 例如:整数序列-2, 11, -4, 13, -5, 2, -5, -3, 12, -9的最大子序列的和为21。对于这个问题,最简单也是最容易想到的那就是穷举所有子序列的方法。利用三重循环,依次求出所有子序列的和然后取最大的那个。当然算法复杂度会达到转载 2015-10-08 19:48:54 · 241 阅读 · 0 评论 -
最长回文串
原文 字符。例如: 原串:abaab 新串:#a#b#a#a#b# 这样一来,原来的奇数长度回文串还是奇数长度,偶数长度的也变成以‘#’为中心奇数回文串了。 接下来就是算法的中心思想,用一个辅助数组P 记录以每个字符为中心的最长回文半径,也就是P[i]记录以Str[i]字符为中心的最长回文串半径。P[i]最小为1,此时回文串为Str[i]本身。 我们可以对上述例子写出其P转载 2015-10-14 21:06:44 · 463 阅读 · 0 评论 -
动态规划-最大子矩阵和
求输入一个矩阵的最大子矩阵和 输入 第1行:M和N,中间用空格隔开(2 <= M,N <= 500)。 第2 - N + 1行:矩阵中的元素,每行M个数,中间用空格隔开。(-10^9 输出 输出和的最大值。如果所有数都是负数,就输出0。 输入示例 3 3 -1 3 -1 2 -1 3 -3 1 2 输出原创 2016-01-19 00:58:17 · 1248 阅读 · 0 评论 -
动态规划-循环数组最大子段和
分析: (1)笨方法,我们可以用普通最大子段和的方法解决这个问题。 我们从每个位置“断开”环,然后按普通的最大子段和的方法去做 。这样做的复杂度是O(n^2)。 (2)巧妙点的方法,我们之所以要从某个位置切开是因为循环的 最大子段和可能是跨越一部分头和尾。 如上图,最优解可能是0..i, j + 1.. n – 1两段,那这时,其实中间 i + 1..j是个“最小子段和”,因原创 2016-01-19 13:03:36 · 424 阅读 · 0 评论 -
杭电-5569-动太规划
解题思路:dp[i][j]表示点(i,j)的最小贡献 分成三类来计算 #include #include #include #define MAX 1e9+5 using namespace std; int mp[1005][1005]; int dp[1005][1005]; int min(int a,int b) { return a>b?b:a原创 2015-12-26 23:32:54 · 257 阅读 · 0 评论 -
杭电dp60题
杭电dp60题转载 2015-07-27 11:07:55 · 284 阅读 · 0 评论