递推之数字三角形
题目描述:
在如下的数字三角形中寻找一个从顶部到底部的路径,对于任意一个点(最后一行除外),每一步只可以向下或者向右下走,找一条经过的数字之和最大的路径,求出这个和。
输入:
5 //代表有5行
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出:
30
首先考虑三角形的存储,毫无意外,首先选择二维数组,但是这是一个下三角矩阵,一个 n 阶的下三角矩阵将会浪费 n*n-n*(n+1)/2 的空间,因此我们选择将它存在一维数组中,对于一个 5 行的下三角矩阵,只需要 n*(n+1)/2 的一维数组就可以了。
for(int i = 0; i<n; i++) // n 阶 { j = 0; while(i>=j) { b[k++] = a[i][j]; j++; }