SX的数字三角形

 

试题描述

SX数学很强,所以把数学问题都交给她了。还是那个数字三角形(共 n 行,第 i 行有 i 个数),从第一行走到第 n 行,每一步只有两种选择,要么往正下走一步,要么往右下走一步。必须经过某一个点,使所走过的的点的数字之和和最大。各行的数都从最左开始,若一行有多个数则两两之间用一个空格分隔。

输入
第 1 行包含一个数 n,表示共有 n 行,第 2 到 n+1 行为每个的数值,路程必须经过坐标点(n/2,n/2)。
输出
一个数,表示题目要求的最大值。
输入示例
2
1
1 1
输出示例
2
其他说明
数据范围:1<=n<=100,三角形中各个数均不超过100。
 

和动态的数字三角形是一个系列,并且是升级版

 1 #include <iostream>
 2 
 3 using namespace std;
 4 int a[101][101],b[101][101];
 5 int main()
 6 {
 7     int n,i,j;
 8     scanf("%d",&n);
 9     for(i=1;i<=n;i++)
10         for(j=1;j<=i;j++) scanf("%d",&a[i][j]);
11     for(i=1;i<n/2;i++) a[n/2][i]=0;
12     for(i=1;i<=n;i++)
13     {
14         for(j=1;j<=i;j++)
15         {
16             if(a[i-1][j-1]>a[i-1][j]) b[i][j]=a[i][j]+b[i-1][j-1];
17             else b[i][j]=a[i][j]+b[i-1][j];
18         }
19     }
20     int ans=0;
21     for(i=1;i<=n;i++)
22         if(b[n][i]>ans) ans=b[n][i];
23     printf("%d",ans); 
24     return 0;
25 }
SX的数字三角形

 我们发现,坐标点(n/2,n/2)就是第n/2行的最后一个点,所以在搜索前,把那一行的其他数都清零就好了。这样保证会走到那个位置

posted @ 2016-03-12 09:52  姚呵呵  阅读(491)  评论(0编辑  收藏  举报