#include "iostream"
#include "algorithm"
#include "fstream"
using namespace std;
/*
注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的数或者右边的数。
d[i][j] 表示到达第i行,第j列时,最优路径上数字总和最大值
d[i][j] = max{d[i-1][j], d[i-1][j-1]} + a[i][j]
d[1][1] = a[1][1];
*/
int d[50][50];
int a[50][50];
int max(int a, int b)
{
return a>b? a:b;
}
int triangle(int n)
{
d[1][1] = a[1][1];
for(int i=2; i<=n; i++)
for(int j=1; j<=i; j++)
d[i][j] = max(d[i-1][j], d[i-1][j-1]) + a[i][j];
int max = d[n][1];
for(i=2; i<=n; i++)
if(max < d[n][i])
max = d[n][i];
return max;
}
int main()
{
ifstream fin("triangle.txt");
int n;
cout << "三角形行数:";
fin >> n; cout << n;
cout << "\n输入三角形:\n";
for(int i=1; i<=n; i++)
{
for(int j=1; j<=i; j++)
{
fin >> a[i][j];
cout << a[i][j] << " ";
}
cout << endl;
}
cout << "从顶到底经过的数字总和最大为:" << triangle(n) << endl;
fin.close();
return 0;
}
数字三角形问题
最新推荐文章于 2024-06-13 23:26:29 发布