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
ID: mercury23
PROG: numtri4
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



浙公网安备 33010602011771号