#34838: Python,差一點點?


s11104220@school.saihs.edu.tw (施同學)

學校 : 臺北市立松山高級工農職業學校
編號 : 221254
來源 : [118.165.27.136]
最後登入時間 :
2024-08-27 03:46:40
f314. 3. 勇者修煉 -- 2020年10月APCS | From: [123.193.213.137] | 發表日期 : 2023-04-19 22:59

如何用迭代做DFS並獲得加總值?
遞迴過深60%NA
 
#34839: Re: Python,差一點點?


s11104220@school.saihs.edu.tw (施同學)

學校 : 臺北市立松山高級工農職業學校
編號 : 221254
來源 : [118.165.27.136]
最後登入時間 :
2024-08-27 03:46:40
f314. 3. 勇者修煉 -- 2020年10月APCS | From: [123.193.213.137] | 發表日期 : 2023-04-20 00:02

如何用迭代做DFS並獲得加總值?
遞迴過深60%NA
from sys import stdin
#mem=dict()
n,m=map(int,stdin.readline().split())
mem2=[[dict() for _ in range(m)] for _ in range(n)]
def dfs(x,y,l,r):
    global mem2
    b=[]
    #if (x,y,l,r) in mem:
    #    return mem[(x,y,l,r)]
    try:
        if (l,r) in mem2[x][y]:
            return mem2[x][y][(l,r)]
    except:pass
    if x!=n :
        b.append(dfs(x+1,y+0,0  ,m-1)+a[x][y])
    else:
        #mem.update({(x,y,l,r):0})
        try:
            mem2[x][y].update({(l,r):0})
        except:pass
        return 0
    if y<r:
        b.append(dfs(x+0,y+1,y+1,r  )+a[x][y])
    if y>l:
        b.append(dfs(x+0,y-1,l  ,y-1)+a[x][y])
    ans=max(b)
    #mem.update({(x,y,l,r):ans})
    mem2[x][y].update({(l,r):ans})
    return ans


a=[list(map(int, stdin.readline().split())) for _ in range(n)]
for i in range(n+1):
    #for j in range(m-1,-1,-1):
        #print(n-i,j,j,m-1,"hi1") mem
    #    dfs(n-i,j,j,m-1)
    dfs(n-i,m-1,0,m-1)
    #for j in range(m):
        #print(n-i,j,0,j,"hi2") mem
    #    dfs(n-i,j,0,j)
    dfs(n-i,0,0,m-1)
#print(max([mem[(0,i,i,m-1)] for i in range(m)]
#           +[mem[(0,i,0,i)] for i in range(m)]))
print(max([dfs(0,i,0,m-1) for i in range(m)]))


mem和mem2類似,

使用mem2會出現

系統呼叫了 abort 函式!
Fatal Python error: Cannot recover from stack overflow.

把mem取消註解會出現

RecursionError: maximum recursion depth exceeded in comparison
 
ZeroJudge Forum