2017-5-29
题目
输入n表示下面的三角形有n行,然后输入一个阶梯型数字三角,问从顶开始向下(两种选择)到底部经过的路径上的数字之和最大为多少。
样例
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出
30
题解
把每条路径都找出来好像很烦,所以我没有用这种方法,我想到,每一个数可以由其上方左右两个数字前往,所以只要比较 到上面两个数字为止的路径数字之和 的大小,然后把大的那个加到本数字上,比如说样例中的1,可以由3和8”行走“得到,而这两者的数指其实是10(7+3)和15(7+8),所以1数字放在数组中的元素就变成了16(15+1),以此类推,最后搜索最底下一行的数字大小即可。
代码
/*
ID: xcwhkh1
LANG: C
TASK: numtri
*/
#include <stdio.h>
int a[1001][1001]={0};
int main () {
FILE *fin=fopen("numtri.in","r");
FILE *fout=fopen("numtri.out","w");
int n;
fscanf(fin,"%d",&n);
for(int i=1;i<=n;i++)//行数
for(int j=1;j<=i;j++)//列数
{
fscanf(fin,"%d",&a[i][j]);
if(i>1)
if(a[i-1][j-1]>a[i-1][j])
a[i][j]+=a[i-1][j-1];
else
a[i][j]+=a[i-1][j];
}
int max=0;
for(int i=1;i<=n;i++)
if(a[n][i]>max)
max=a[n][i];
fprintf(fout,"%d\n",max);
return 0;
}