DP
文章平均质量分 75
小弟季义钦
好东西要大家分享!
展开
-
动态规划求解矩阵累计和最大的路径
/** * 有一个 M x N 的矩阵,其中每个格子里面都有特定的钱。 * 左上角走到右下角,只能向右或者向下走,问怎么走才能捡到最多的钱。 * 输出捡钱的路径。 * 解析: 动态规划。 首先找到子结构,构造递推式。 * 对于每个位置能捡到的最多的钱是: * a[i][j] = max{a[i-1][j] + w[i][j],a[i][j-1] + w[i][j]} */ #原创 2012-10-07 19:10:39 · 2515 阅读 · 0 评论 -
字符串之间的最短距离
#include using namespace std; //为了方便,将a和b的长度固定下来,这样就不用动态创建数组了 #define M 6 #define N 3 int dp[M][N] = {0}; /** * 问题描述: 两个字符串如果可以根据添加,删除,修改一个字符串来变成另一个字符串,则 * 说这两个字符串距离为1. 现在给出两个字符串,求出他们之间的距离。原创 2012-11-11 21:49:50 · 1278 阅读 · 0 评论 -
两个字符串的最长公共子串
DP的方式求解: #include using namespace std; #define M 9 #define N 11 //如果动态传进m和n的话,数组lcs赋值只能通过指针,这样太麻烦 int lcs[M][N]; /** * 最长公共子串(LCS) * 状态转移方程: * f(i,j) = 0 a[i] != b[j] f(i-1,j-原创 2012-11-04 18:05:13 · 847 阅读 · 0 评论 -
两个序列的最长公共子序列
DP方式求解: #include using namespace std; /** * 问题描述:两个字符串,求解他们的最长公共子序列,子序列不要求连续 * * 分析这个问题,我们可以发现有子结构,可以将X,Y两个字符串的最长公共子串 * 的问题转换成更小的子问题。而且这个问题的求解过程有重叠子问题。根据这两个 * 性质我们确定尝试用DP来解决。 * 首先定义状态,f(m原创 2012-11-11 22:48:45 · 1314 阅读 · 0 评论 -
最长递增子序列
/* * MaxIncresingSubSequeuce.cpp * * Created on: 2012-6-24 * Author: jiyiqin * * 最长递增子序列,比如1,-1,2,-3,4,-2,6,-5, 返回 1,2,4,6,长度为4 * */ #include using namespace std; class Max原创 2012-11-16 21:42:56 · 779 阅读 · 0 评论 -
一维子数组最大和
/* * MaxSumSubArray.cpp * * Created on: 2012-6-20 * Author: jiyiqin * * 给定一个包含正数,负数,0的数组,求一个连续的子数组,使得其和最大 */ #include using namespace std; #define MIN_INT -10000 class MaxS原创 2012-11-16 23:05:48 · 881 阅读 · 0 评论