特此鸣谢这位作者的点播,小郑从中获益不少文章来源https://cloud.tencent.com/developer/article/1538177
n=int(input())
a=[]
for _ in range(n):
tmp=list(map(int,input().split()))
tmp+=[0]*(n-len(tmp))
a.append(tmp)
dp=[[0]*n for i in range(n)]
path=[[0]*n for i in range(n)]#记录左右路径 左-1 右+1
dp[0][0]=a[0][0]
for i in range(1,n):
dp[i][0]=dp[i-1][0]+a[i][0]#初值
path[i][0]=path[i-1][0]-1
for i in range(1,n):
for j in range(1,n):
#dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+a[i][j]
if dp[i-1][j]>=dp[i-1][j-1]:#由上一层左拐得到
dp[i][j]=dp[i-1][j]+a[i][j]
path[i][j]=path[i-1][j]-1
else:
dp[i][j]=dp[i-1][j-1]+a[i][j]
path[i][j]=path[i-1][j-1]+1
ans=0
for k in range(0,n):
if abs(path[-1][k])<=1:
ans=max(ans,dp[-1][k])
print(ans)
我是小郑 期待与你一起奔赴热爱!冲击蓝桥杯!