#include"stdafx.h"
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
#define N 100
int MAXSUM(int a[][N], int n, int x[])
{
int i, j, t;
for (i = n - 1; i >= 1; i--) { //从最底层开始寻找
for (j = 1; j <= i; j++) { //每行遍历
if (a[i + 1][j]>a[i + 1][j + 1]) { //左边分支大
a[i][j] += a[i + 1][j];
t = a[i + 1][j]; //用于记录路径
}
else { //右边分支大
a[i][j] += a[i + 1][j + 1];
t = a[i + 1][j + 1]; //用于记录路径
}
}
x[i] = t;
}
return a[1][1]; //一直累加到顶端
}
void main()
{
int i, j, n, first;
int a[N][N], x[N];
printf("需要输入多少层的三角形?\n");
cin >> n;
printf("开始输入数字三角形数据:\n");
for (i = 1; i <= n; i++) {
for (j = 1; j <= i; j++) {
cin >> a[i][j];
}
}
first = a[1][1];
printf("第一层到最后一条路经过的权值最大值为: %d\n", MAXSUM(a, n, x));
printf("所经过的路径是:\n");
printf("%d->", first);
for (i = 1; i <= n - 2; i++) {
printf("%d->", x[i] - x[i + 1]);
}
printf("%d\n", x[n - 1]);
getchar();
}
运行结果如下: