递推与记忆化搜索

 内容参考书籍《算法竞赛入门到进阶》

先看一道经典题:poj1163 http://poj.org/problem?id=1163

 如果此题按照从上往下的方法计算,每走一步下一步就有2种选择,其复杂度为2n

那么我们从下往上算,下面给出dfs代码:

int dfs(int i,int j)
{
	if (i == n) return a[i][j];//递归到最后一行返回
	return dp[i][j] = max(dfs(i+1,j),dfs(i+1,j+1))+ a[i][j];
}

从1,1开始往下走,一直到最后一行,返回,每一次取能走到该点的最大值加上该点,继续返回,代码很好理解,只是复杂度为2n

下面我们再来讲一下递推,代码如下:

猜你喜欢

转载自www.cnblogs.com/125418a/p/12943702.html