当前位置:   article > 正文

【算法设计与分析】数字三角形问题——对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底的路径经过的数字和的最大值。_给定一个由 n 行数字组成的数字三角形,试设计一个算法,计算出 从三角形的顶至底的

给定一个由 n 行数字组成的数字三角形,试设计一个算法,计算出 从三角形的顶至底的

一、问题描述

  给定一个由n行数字组成的数字三角形,试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。
数据输入: 由文件input.txt提供输入数据。文件的第1行是数字三角形的行数n,(1≤n≤100)。接下来n行是数字三角形各行中的数字。所有数字在0~99之间。
结果输出: 将计算结果输出到文件output.txt。文件第1行中的数是计算出的最大值。

二、分析

  用动态规划的方法自底向上计算。
  例如,输入如下数字三角形中的各行数字,具体步骤如下:
在这里插入图片描述
  根据上述步骤写出代码,运行结果如下,其中第1行为数字三角形的行数,接下来的5行是数字三角形各行中的数字。
在这里插入图片描述

三、运行结果

  运行程序后,打开output.txt文本,文件第1行中的数是计算出的最大值。
在这里插入图片描述

四、代码

#include<iostream>
#include<fstream>
using namespace std;
int a[100][100];
int main() {
	ifstream in("input.txt");
	ofstream out("output.txt");
	int n;
	in >> n;//n行数字
	for (int i = 0; i < n; i++)
		for (int j = 0; j <= i; j++)
			in >> a[i][j]; //输入每行数字
	for (int i = n - 2; i >= 0; i--) { //自底向上
		for (int j = 0; j <= i; j++) {
			a[i][j] = max(a[i][j] + a[i + 1][j], a[i][j] + a[i + 1][j + 1]);
		}
	}
	out << a[0][0];
	in.close();
	out.close();
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/487879
推荐阅读
相关标签
  

闽ICP备14008679号