繁体   English   中英

如何在数字三角形中找到最大路径总和

[英]How to find the largest path sum in a triangle of numbers

我正在尝试编写一个程序来查找三角形的最大路径总和。 路径总和是出现在从顶部到底部开始的路径上的数字的总和,因此在每个路径上,下一个数字位于下面的正下方或一个右方的位置,如下所示:

1
12
123
1234

我在互联网上看到了一种可以解决此问题的算法,但是输出仍然是数组索引[0][0]的原始值。

这是我用C语言编写的代码:

#include<stdio.h>
int main(){
    int rows,testcases;
    scanf("%d",&testcases);
    scanf("%d",&rows);
    int a[rows][rows];
    while(testcases--){
        for(int i=0;i<rows;i++){
        for(int j=0;j<i+1;j++)
            scanf("%d",&a[i][j]);
        }

        for(int i=rows;i>1;i--){
            for(int j=0;j<i-1;j++){
                if(a[i][j]>a[i][j+1]){
                    a[i-1][j]=a[i-1][j]+a[i][j];
                }
                else{
                    a[i-1][j]=a[i-1][j]+a[i][j+1];
                }
            }
       }

        printf("The Largest Path Sum = %d",a[0][0]);
    }
    return(0);
}

我期望数组索引0 =最大和。 实际结果为原始值

您有一个自底向上的动态编程解决方案。 您的循环条件不正确。 从第rows - 1到第1 rows - 1迭代外循环,从0i-1迭代内循环。

然后,解决方案如下所示:

for(int i = rows - 1;i > 0;i--){
  for(int j = 0;j < i;j++){
    if(a[i][j] > a[i][j+1]){
      a[i-1][j] = a[i-1][j] + a[i][j];
    }
    else {
      a[i-1][j] = a[i-1][j] + a[i][j+1];
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM