碁を打つ
9736 ワード
作成日:2022年2月3日午後6:15
問題:nが高いほど実行時間が長くなり、エラー処理につながる. Cut Edgeテクノロジー(枝切り)
私が実装したコードの問題-実行時間を大幅に減らすために、条件文を正しい答えから逸脱した条件ですぐに関数を返すように構成します.
上記のコードに木構造が追加され、再帰的な検査を継続する過程で、リスト全体の和(total)から、これまでの検査の総数(tsum)の和(すなわち、将来木の残りの値をすべて加算すると仮定)を減算すると、最後に計算され、正解(res)が得られる更新できない場合はreturnで退出する仕組みです.
インプリメンテーションコード
# 바둑이 승차 (DFS)
import sys
sys.stdin = open("input.txt", "rt")
def DFS(index, sum):
global res
if index == n:
if sum < c and sum > res:
res = sum
else:
return
else:
DFS(index+1, sum+l[index])
DFS(index+1, sum)
if __name__ == "__main__":
c, n = map(int, input().split())
l = []
for _ in range(n):
l.append(int(input()))
res = 0
DFS(0, 0)
print(res)
模範解答
# 바둑이 승차 (DFS)
import sys
#sys.stdin = open("in5.txt", "rt")
def DFS(index, sum, tsum):
global res
if sum + (total-tsum) < res:
return
if sum > c:
return
if index == n:
if sum > res:
res = sum
else:
return
else:
DFS(index+1, sum+l[index], tsum+l[index])
DFS(index+1, sum, tsum+l[index])
if __name__ == "__main__":
c, n = map(int, input().split())
l = []
for _ in range(n):
l.append(int(input()))
res = 0
total = sum(l)
DFS(0, 0, 0)
print(res)
差異
私が実装したコードの問題-実行時間を大幅に減らすために、条件文を正しい答えから逸脱した条件ですぐに関数を返すように構成します.
if sum + (total-tsum) < res:
return
上記のコードに木構造が追加され、再帰的な検査を継続する過程で、リスト全体の和(total)から、これまでの検査の総数(tsum)の和(すなわち、将来木の残りの値をすべて加算すると仮定)を減算すると、最後に計算され、正解(res)が得られる更新できない場合はreturnで退出する仕組みです.
Reference
この問題について(碁を打つ), 我々は、より多くの情報をここで見つけました https://velog.io/@lsj8706/바둑이-승차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol