赞
踩
给定一个由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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。