[蓝桥杯]ALGO-124.算法训练_数字三角形

问题描述
  (图3.)示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路
  径,使该路径所经过的数字的总和最大。
  ●每一步可沿左斜线向下或右斜线向下走;
  ●1<三角形行数≤100;
  ●三角形中的数字为整数0,1,…997
           3  8
         8  1  0
       2  7  4  4
  4  5  2  6  5.
  (图3.)
输入格式
  文件中首先读到的是三角形的行数。

  接下来描述整个三角形
输出格式
  最大总和(整数)
样例输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
样例输出
30
题目描述

代码如下:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define LEN 100
 4 #define MAX(X,Y) (X)>(Y)?(X):(Y)
 5 
 6 int main(void)
 7 {    
 8     int n,i,j,res;
 9     int dp[LEN+1][LEN+1];
10     memset(dp,0,sizeof(dp));
11     scanf("%d",&n);
12     
13     for (i=0 ; i<n ; i++)
14     {
15         for (j=0 ; j<=i ; j ++)
16         {
17             scanf("%d",&dp[i][j]);
18             if (i>0) //每行的数据依次添加上方或左上方中的最大值 
19             {
20                 if (j==0)
21                     dp[i][j] += dp[i-1][j];
22                 else
23                     dp[i][j] += MAX(dp[i-1][j],dp[i-1][j-1]);
24             }
25         }
26     }
27     res = dp[n-1][0];
28     for (i=1 ; i<n ; i++)//遍历最后一行中的最大值 
29         if (dp[n-1][i] > res)
30             res = dp[n-1][i];
31     
32     printf("%d",res);
33     return 0;
34 }
35     
C解法

解题思路:

从第二行开始,每个数据分别添加上方及左上方中的最大值(即走左下角的路和右下角的路)

最后查找最后一行中的最大值

猜你喜欢

转载自www.cnblogs.com/mind000761/p/10182557.html