
动态规划
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 · 276 阅读 · 0 评论 -
最长回文串
原文字符。例如:原串:abaab新串:#a#b#a#a#b#这样一来,原来的奇数长度回文串还是奇数长度,偶数长度的也变成以‘#’为中心奇数回文串了。接下来就是算法的中心思想,用一个辅助数组P 记录以每个字符为中心的最长回文半径,也就是P[i]记录以Str[i]字符为中心的最长回文串半径。P[i]最小为1,此时回文串为Str[i]本身。我们可以对上述例子写出其P转载 2015-10-14 21:06:44 · 492 阅读 · 0 评论 -
动态规划-最大子矩阵和
求输入一个矩阵的最大子矩阵和输入第1行:M和N,中间用空格隔开(2 <= M,N <= 500)。第2 - N + 1行:矩阵中的元素,每行M个数,中间用空格隔开。(-10^9 输出输出和的最大值。如果所有数都是负数,就输出0。输入示例3 3-1 3 -12 -1 3-3 1 2输出原创 2016-01-19 00:58:17 · 1283 阅读 · 0 评论 -
动态规划-循环数组最大子段和
分析:(1)笨方法,我们可以用普通最大子段和的方法解决这个问题。我们从每个位置“断开”环,然后按普通的最大子段和的方法去做。这样做的复杂度是O(n^2)。(2)巧妙点的方法,我们之所以要从某个位置切开是因为循环的最大子段和可能是跨越一部分头和尾。如上图,最优解可能是0..i, j + 1.. n – 1两段,那这时,其实中间i + 1..j是个“最小子段和”,因原创 2016-01-19 13:03:36 · 470 阅读 · 0 评论 -
杭电-5569-动太规划
解题思路:dp[i][j]表示点(i,j)的最小贡献分成三类来计算#include#include#include#define MAX 1e9+5using 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 · 293 阅读 · 0 评论 -
杭电dp60题
杭电dp60题转载 2015-07-27 11:07:55 · 342 阅读 · 0 评论