如图所示数塔共有5(n)层,算法思想为从第4(n-1)层开始找往下找相邻的两个数中的最大数即a[i][j] += max(a[i+1][j],a[i+1][j+1]);
不断往上叠加即可
#include <stdio.h>
#include <math.h>
int max(int x,int y) {
if(x > y)
return x;
else return y;
}
int main() {
int c,n,a[101][101]={0},i,j;
scanf("%d",&c);
while(c--) {
scanf("%d",&n);
for(i = 1;i <= n;i ++)
for(j = 1;j <= i;j ++) {
scanf("%d",&a[i][j]);
}
i -= 2;
for(;i > 0;i --)
for(j = 1;j <= i;j ++)
a[i][j] += max(a[i+1][j],a[i+1][j+1]);
printf("%d\n",a[1][1]);
}
return 0;
}
本文介绍了一种解决数塔路径求和问题的算法。该算法通过从倒数第二层开始,选择每层两个相邻数中较大者进行累加,最终得出从顶部到底部的最大路径和。代码使用 C 语言实现。
&spm=1001.2101.3001.5002&articleId=69525114&d=1&t=3&u=afef59704a934cb7b3e725187cdb9fe6)
609

被折叠的 条评论
为什么被折叠?



