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
/**/
/*
2ID: mercury2
3PROG: numtri
4LANG: 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
2ID: mercury2
3PROG: numtri
4LANG: 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