【动态规划】 三角形
此题为动态规划算法题,题目来源计科老班
题目描述
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
(图一)
图一表示一个5行的数字三角形。假设给定一个n行数字三角形,计算出从三角形顶至底的一条路径,使该路径经过的数字总和最大。
每一步只能由当前位置向下或右下。
输入
你的程序要能接受标准输入。第一行包含一个整数T,表示总的测试次数。
对于每一种情况:第一行包含一个整数N,其中1 < N < 100,表示三角形的行数。
接下来的N行输入表示三角形的每一行的元素Ai,j,其中0 < Ai,j < 100。
输出
输出每次测试的最大值并且占一行。
样例输入
1
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
样例输出
30
思路详解
此题采用动态规划,将原问题分解为若干个子问题,先求解子问题,然后从这些子问题得解得到原问题的解。
此题,采用从上往下走的方法,第一层固定是7,因此从第二层开始计算,每一个位置上的数,由上面以及左上角的数得到,依次类推,直到走到最后一层。最后遍历最底层的数,取出值最大的数。
代码
#include<iostream>
using namespace std;
int A[101][101];
int MaxSum[101][101];
int main