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.
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.
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
A single line containing the largest sum using the traversal specified.
30
题目的大致意思就是让你在这个number triangle往斜方,正下方,找最大的树,问最大的这些数的和是多少。
usaco还有一个奇怪的规则,输出完必须加endl。。。要不然过不了!
- /*
- ID: choiyin1
- LANG: C++
- TASK: numtri
- */
-
- #include
- using namespace std;
-
- int n,ans;
- int main() {
- freopen("numtri.in", "r", stdin);
- freopen("numtri.out", "w", stdout);
- cin >> n;
- int numMax[1050];
- int num[1050];
- for (int i = 1; i <= n; i ++){
- for (int j = 1; j < i + 1; j ++)
- cin>>num[j];
- for (int j = i; j > 0; j --)
- numMax[j] = max(numMax[j - 1], numMax[j]) + num[j];
- }
- for (int i = 1; i<= n; i ++){
- ans = max(ans, numMax[i]);
- }
- cout << ans<
- }