问题:
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或右下走。只需要求出这个最大和即可,不必给出具体路径。
三角形的行数大于1小于等于100,数字为 0 - 99
输入格式:
5 //三角形行数,下面是三角形
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出
要求输出最大和
思路:
1. 直接输入行数,利用双重循环输入;
2. 如果行遍历完,将maxSum赋值为左下角和右下角的最大值+本行值;
#include<iostream>
#include<cstdio>
#include<algorithm>
#define MAX 101
using namespace std;
int D[MAX][MAX];
int n;
int maxSum[MAX][MAX];
int main()
{
int i,j;
cin>>n; //输入行数
for(i=1;i<=n;i++) //利用双重循环输入数组D
for(j=1;j<=i;j++)
cin>>D[i][j];
for(int i=n;i>=0;i--) //利用双重循环
for(int j=1;j<=i;++j)
maxSum[i][j]=max(maxSum[i+1][j],maxSum[i+1][j+1])+D[i][j];
cout<<maxSum[1][1]<<endl;
return 0;
}