0
点赞
收藏
分享

微信扫一扫

Python 蓝桥杯 动态规划 2道例题+配套1道历年真题

静悠 2022-02-04 阅读 62

 特此鸣谢这位作者的点播,小郑从中获益不少文章来源icon-default.png?t=M0H8https://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)

 我是小郑 期待与你一起奔赴热爱!冲击蓝桥杯!

举报

相关推荐

0 条评论