문제 : https://www.acmicpc.net/problem/21735
초기 구상단계
초기 코드
def dfs(step, idx):
global maxi
if step == M:
if S[-1] >= maxi:
maxi = S[-1]
return
else:
for i in range(2):
if i == 0:
idx += 1
if idx >= N:
idx -= 1
continue
S.append(S[-1] + rail[idx])
dfs(step + 1, idx)
S.pop()
idx -= 1
else:
idx += 2
if idx >= N:
idx -= 2
continue
tmp = S[-1] >> 1
tmp += rail[idx]
S.append(tmp)
dfs(step + 1, idx)
S.pop()
idx -= 2
S = [1]
maxi = -1
dfs(0, 0)
print(maxi)
최종 코드
def dfs(step, idx):
global maxi
if step == M:
if S[-1] >= maxi:
maxi = S[-1]
return
else:
for i in range(2):
if i == 0:
idx += 1
if idx >= N:
if maxi <= S[-1]:
maxi = S[-1]
idx -= 1
return
S.append(S[-1] + rail[idx])
dfs(step + 1, idx)
S.pop()
idx -= 1
else:
idx += 2
if idx >= N:
if maxi <= S[-1]:
maxi = S[-1]
idx -= 2
return
tmp = S[-1] >> 1
tmp += rail[idx]
S.append(tmp)
dfs(step + 1, idx)
S.pop()
idx -= 2
S = [1]
maxi = -1
dfs(0, -1)
print(maxi)
PASS
더 나아가..