先大概理解一下题意.可以先再纸上写写,琢磨一下.
这个题,我刚开始看,也不怎么懂,多看几个题解琢磨一下,看不懂的去查查资料.
h = int(input()) # 输入数据
W = [list(map(int, input().split())) for i in range(h)]
# 循环遍历计算到每一行的和的最大值
for i in range(1, h):
for j in range(0, i + 1):
if j == 0: # 最左边元素只能由右上方得到
W[i][j] += W[i - 1][j]
elif j == i: # 最右边元素只能由左上方得到
W[i][j] += W[i - 1][j - 1]
else: # 其余元素由上方较大值得到
W[i][j] += max(W[i - 1][j - 1: j + 1])
if h & 1: # 如果是奇数行,则返回最中间值
print(W[-1][h // 2])
else: # 偶数行则返回中间较大值
print(max(W[-1][h // 2 - 1], W[-1][h // 2]))
a=int(input())
b=[]
for o in range(a):
b.append(input().split()) #添加属于语句,以空格分隔存入列表B
for p in range(o+1):
b[o][p]=int(b[o][p]) 将b中的元素由str转为int
for o in range(1,a):
for w in range(o+1):
if w == 0: #如果在最左边,那么只能由上一层的最左边向左下
b[o][w]+=b[o-1][w]
elif w == o:#如果在最右边,只能由上一层的最右边向右下
b[o][w]+=b[o-1][w-1]
else: #如果在中间,就从上一层的同列和上一列的元素选个最大的
b[o][w]+=max(b[o-1][w],b[o-1][w-1])
#由于向左下和向右下的次数不能超过1
#所以最终答案一定是最后一排的中间一个或中间两个中的一个
if len(b[a-1])%2==0: 如果是偶数行,那么就是中间两个选最大
print(max(b[a-1][int(len(b[a-1])/2)],b[a-1][int(len(b[a-1])/2)-1]))
if len(b[a-1])%2==1: 如果是奇数行,那么就是中间那个
print(b[a-1][int(len(b[a-1])/2)])