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. Input There are multiple test cases.The first line of each test case 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. Output Print a single line containing the largest sum using the traversal specified for each test case. Sample Input5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 Sample Output30 Original: IOI 95 #include<iostream>using namespace std; int maxn(int a,int b){ return a>b?a:b;} int main(){ int i,j,n,num[1000][1000]; while(cin>>n) { for(i=1;i<=n;i++) for(j=1;j<=i;j++) cin>>num[i][j]; for(i=n-1;i>=1;i--) for(j=1;j<=i;j++) num[i][j]+=maxn(num[i+1][j],num[i+1][j+1]); cout<<num[1][1]<<endl; } return 0;}

评论