题目描述
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
需要我们从顶向下找出使得和最大的下降和,换个思路就是从最下到上找出口使得和最大是一样的
T = int(input())
for i in range(T):
n = int(input())
dp = [list(map(int,input().split())) for _ in range(n)]
for i in range(n-2,-1,-1):
#n-2表示从第二行开始往上推
for j in range(i+1):
dp[i][j] += max(dp[i+1][j],dp[i+1][j+1])
print(dp[0][0])