Number Triangles
Consider the number triangle shown below. Write a program that calculates the highest sum of numbers that can be passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right.
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
In the sample above, the route from 7 to 3 to 8 to 7 to 5 produces the highest sum: 30.
PROGRAM NAME: numtri
INPUT FORMAT
The first line contains R (1 <= R <= 1000), the number of rows. Each subsequent line contains the integers for that particular row of the triangle. All the supplied integers are non-negative and no larger than 100.SAMPLE INPUT (file numtri.in)
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
OUTPUT FORMAT
A single line containing the largest sum using the traversal specified.SAMPLE OUTPUT (file numtri.out)
30
/*
ID: conicoc1
LANG: C
TASK: numtri
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int Num[1000][1000];
int Answer[1000][1000];
int a[1000];
int R;
int highest;
int Max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int main()
{
FILE *fin,*fout;
fin=fopen("numtri.in","r");
fout=fopen("numtri.out","w");
fscanf(fin,"%d",&R);
// printf("%d",R);
int i,j;
for(i=0;i<R;i++)
{
for(j=0;j<=i;j++)
{
fscanf(fin,"%d",&Num[i][j]);
if(j==0)
Answer[i][j]=Num[i][j]+Answer[i-1][j];
else
if(j==i)
Answer[i][j]=Num[i][j]+Answer[i-1][j-1];
else
Answer[i][j]=Num[i][j]+Max(Answer[i-1][j-1],Answer[i-1][j]);
}
}
for(i=0;i<R;i++)
{
if(i==0)
highest=Answer[R-1][i];
if(Answer[R-1][i]>highest)
highest=Answer[R-1][i];
}
fprintf(fout,"%d\n",highest);
return 0;
}