题意:要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
可以直接用递归计算,将数塔看成一棵树,用数组实现,分别递归的求出每棵子树的最大值
再进行比较,取其中每步的最大值,由底至上,逐层比较,最后的出最大和。
- #include <stdio.h>
- #define SIZE 100
- int val[SIZE][SIZE];
- int count(int n,int i,int j)
- {
- int leftNum = 0;
- int rightNum = 0;
- int max = 0;
- if(n <= 0)
- {
- return 0;
- }
- leftNum = count(n-1,i+1,j);
- rightNum = count(n-1,i+1,j+1);
- if(leftNum > rightNum)
- {
- max = leftNum;
- }else
- {
- max = rightNum;
- }
- max = max + val[i][j];
- return max;
- }
- int main()
- {
- int c;
- while(scanf("%d",&c) != EOF)
- {
- int n;
- int i;
- for(i = 0; i < c; i++)
- {
- int j,k,max;
- scanf("%d",&n);
- for(j = 0; j < n; j++)
- {
- for(k = 0; k <= j; k ++)
- {
- scanf("%d",&val[j][k]);
- }
- }
- max = count(n,0,0);
- printf("%d\n",max);
- }
- }
- return 0;
- }