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.
1
/**/
/*
2
ID: mercury2
3
PROG: numtri
4
LANG: C++
5
*/
6
#include
<
iostream
>
7
8
using
namespace
std;
9
10
const
int
Size
=
1000
;
11
int
n;
12
int
a[Size][Size];
13
int
f[Size][Size];
14
15
void
input()
16
{
17
freopen("numtri.in","r",stdin);
18
cin >> n;
19
for( int i = 0; i < n; i++ )
20
for( int j = 0; j < i+1; j++ )
21
cin >> a[i][j];
22
}
23
24
void
cal()
25
{
26
for( int i = n - 1; i > 0; i-- )
27
{
28
for( int j = 0; j < i; j++ )
29
a[i-1][j] = max( a[i][j],a[i][j+1] ) + a[i-1][j];
30
}
31
}
32
33
void
output()
34
{
35
freopen("numtri.out","w",stdout);
36
cout << a[0][0] << endl;
37
}
38
39
int
main()
40
{
41
input();
42
cal();
43
output();
44
return 0;
45
}
46


2

3

4

5

6

7

8

9

10

11

12

13

14

15

16



17

18

19

20

21

22

23

24

25



26

27



28

29

30

31

32

33

34



35

36

37

38

39

40



41

42

43

44

45

46
