
动态规划
文章平均质量分 74
_王川
屌丝程序员
展开
-
动态规划4:最大子段和问题到最大子矩阵问题(四):最大子矩阵面积问题
上文讲的是从二维矩阵(r*c),找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大但是这个矩形的大小不一定是最大的,现在我们来找一个最大面积的子矩阵转自:《浅谈用极大化思想解决最大子矩形问题》问题1:来看LeetCode上的一道题:LeetCode OJ:Maximal Rectangle题意是:给一个只有0和1元素的矩阵,从中找出一个最大的子矩阵,满足矩阵内只包含1这原创 2014-02-01 21:23:17 · 2781 阅读 · 0 评论 -
01背包回溯法
#include const int N=8;//物品个数const int M=110;int W[N+1]={0,1,11,21,23,33,43,45,55};//重量数组,从1开始int P[N+1]={0,11,21,31,33,43,53,55,65};//效益数组//最终的重量和收益int fw=0;int fp=-1;int X[N+1]={0};//记录最终物原创 2014-03-10 21:17:36 · 1493 阅读 · 0 评论 -
动态规划6:最长递增子序列问题
一、最长递增子序列问题1、动态规划法设LIS[i]保存的是0到i(包括i)的最长递增子序列的元素个数则LIS[i]=max{1,LIS[j]+1}0时间复杂度O(n^2)//最长递增子序列#include #include #include #include using namespace std;#define MAX 100#define len 10in原创 2014-02-10 14:34:04 · 1288 阅读 · 0 评论 -
动态规划7:最长公共子序列(LCS)
递归关系如下:#include #include using namespace std; #define MAX 100void main() { string a="abcdef"; string b="abcfeg"; int lena=a.length(); int lenb=b.length(); int dp[MAX][MAX]=原创 2014-02-10 17:27:19 · 989 阅读 · 0 评论 -
第三十四章:格子取数问题
格子取数问题 题目详情:有n*n个格子,每个格子里有正数或者0,从最左上角往最右下角走,只能向下和向右,一共走两次(即从左上角走到右下角走两趟),把所有经过的格子的数加起来,求最大值SUM,且两次如果经过同一个格子,则最后总和SUM中该格子的计数只加一次。动态规划:DP[step,i,j]表示的是第step步(每两步算一步)走到第i行和第j行(不需原创 2014-02-11 15:06:42 · 2095 阅读 · 0 评论 -
动态规划1:最大子段和问题到最大子矩阵问题(一):最大子段和问题详谈
问题描述:给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。例如:对于6 -1 5 4 -7,最长子段和为14,是6+(-1)+5+4最直接的方法:穷举法:对数组的每一个i到j和都求出来,求出最大值,算法很好想int result=0;for(int i=0;i<n;i++)原创 2014-01-24 19:59:14 · 1613 阅读 · 0 评论 -
编辑距离
编辑距离是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。设dp[i][j]表示str1的0到i位置的子串转换成str2的0到j位置的子串所需的最小编辑距离,则有dp[i, j] := minimum(dp[i-1, j] + 1, //在str1上i位置删除字符(或者在str2上j-1位置插原创 2014-02-08 01:21:33 · 1364 阅读 · 0 评论 -
动态规划3:最大子段和问题到最大子矩阵问题(三):初探最大子矩阵之和问题
问题描述:给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵。 例子:0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 其最大子矩阵为:9 2 -4 1 -1 8 其元素总和为15。 假设最大子矩阵的结果为从第r行到k行、从第i原创 2014-01-24 20:35:58 · 1399 阅读 · 0 评论 -
动态规划2:最大子段和问题到最大子矩阵问题(二):最大n子段和问题详谈
问题描述:最长n子段和问题有了最大子段和问题的基础,将一维数据变成二维数据dp[i][j]保存前j个元素(包括j)分成i段最长连续子序列和则有dp[i][j]=max(dp[i][j-1]+num[j],max(dp[i-1][t]+num[j])) i-1注意t的取值范围,所以不经过优化的代码如下:int DP(int a[],int m,int n)原创 2014-02-01 13:57:18 · 2040 阅读 · 1 评论 -
动态规划问题集锦
动态规划1:最大子段和问题到最大子矩阵问题(一):最大子段和问题详谈动态规划2:最大子段和问题到最大子矩阵问题(二):最大n子段和问题详谈原创 2014-02-07 23:06:31 · 980 阅读 · 0 评论