数字三角形问题(动态规划)

数字三角形问题

1.题目描述:给定一个由n行数字组成的数字三角形,如图3-7所示。设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。
算法设计:对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底的路径经过的数字和的最大值。
数字三角形问题(动态规划)_第1张图片

数字三角形问题(动态规划)_第2张图片 

2.最优子结构:

从第x点到底层有一条最优的路径lx,路径上一点k,那么从k到底层的最有路径lk, 则lk包含于lx

3.状态转移方程:

t(i,j)表示第 i 层的第 j 个点到底层的最长路径长度, w( i, j)表示其权值:

t(i,j) = w(i, j) +max ( t(i+1,j) , t(i+1,j+1) )

即第 i 层的第 j 个点到底层的最长路径长度等于它的权值加上它的两个"子结点"到底层的最长路径长度中较大的

4.算法实现:

用二维数组存储数据,tri[i][j]表示第 i 层的第 j 个数据:

时间复杂度:O(n^2)
 

int solve(int**a, int n){
	int i,j;
	for(i=n-2;i>=0;i--){
		for(j=0;j<=i;j++){
			a[i][j]+=max(a[i+1][j],a[i+1][j+1]);
		}
	}
	return a[0][0];
} 

 

你可能感兴趣的:(算法)