数塔

Description

在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:
有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 已经告诉你了,这是个DP的题目,你能AC吗?
 

Input

输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。
 

Output

对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。
 

Sample Input

1 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
 

Sample Output

30
 
 
经典dp模型。
View Code
 1 #include<stdio.h> 
2 int max(int x,int y)
3 {
4 return x = x > y ? x: y;
5 }
6 int main()
7 {
8 int sum,i,j,a[101][101],c,n;
9 scanf( "%d", &c );
10 while( c-- )
11 {
12 scanf("%d",&n);
13 for( i = 0; i < n; i++ )
14 {
15 for( j = 0; j <= i; j++ )
16 scanf( "%d",&a[i][j] );
17 }
18 for( i = n-1; i > 0; i-- )
19 {
20 for( j = 0; j < i; j++ )
21 {
22 a[i-1][j] = max( a[i][j]+a[i-1][j], a[i][j+1]+a[i-1][j] );
23 }//从后往前,从最底层开始往上加
24 }
25 printf( "%d\n", a[0][0] );
26 }
27 return 0;
28 }

原文地址:https://www.cnblogs.com/zsj576637357/p/2422106.html