#include <stdio.h> int main() { int t,r,i,j; scanf("%d",&t); while(t--) //用t当做是程序退出的条件; { int a[1000][1000]; //数组开在while的里面每次循环都需要用一个新的数组; scanf("%d",&r); //用r表示行的数目 for(i=0;i<r;i++) { for(j=0;j<=i;j++) //循换退出判断条件:j<=i 第一行一个数 第二行两个数 第三行三个数。。。。 { scanf("%d",&a[i][j]); } } for(i=r-1;i>=0;i--) //i=r-1: 从金字塔的底层开始循环 { for(j=0;j<i;j++) { if(a[i][j]>a[i][j+1]) //从底层开始判断 找出子树的根节点的两个子节点中最大的 然后加到根节点上 { a[i-1][j]=a[i][j]+a[i-1][j]; } else { a[i-1][j]=a[i][j+1]+a[i-1][j]; } } } printf("%d\n",a[0][0]); } return 0; } |
Double click to view unformatted code.