ホモサブセット
10344 ワード
作成日:2022年2月1日午後7:36
の基本論理は同じである. 私が実現したコードは、部分集合と求めた部分集合の要素の和を求めるステップですが、模範解答では部分集合を求めるのではなく、直接要素の和を求めて比較します. の2つの部分の集合の和が等しいことを確認した後、私が実現した方法はisSame変数を通じて、再帰数を最終的にTrueに戻すことです. の最良の答えでは、この場合sysである.exit(0)によりマージは行われず,強制終了の手法が用いられた.
インプリメンテーションコード
# 합이 같은 부분 집합 (DFS)
import sys
sys.stdin = open("input.txt" ,"rt")
def DFS(index, l):
if index == len(l):
s = set()
for i in range(len(l)):
if ch[i] == 1:
s.add(l[i])
differenceSet = set(l) - s
if sum(differenceSet) == sum(s):
return True
return False
else:
ch[index] = 1
isSame = DFS(index+1, l)
if isSame:
return isSame
ch[index] = 0
isSame = DFS(index+1, l)
return isSame
if __name__ == "__main__":
n = int(input())
ch = [0]*n
l = list(map(int, input().split()))
res = DFS(0, l)
if res:
print("YES")
else:
print("NO")
模範解答
import sys
sys.stdin=open("input.txt", "r")
def DFS(L, sum):
if sum>total//2:
return
if L==n:
if sum==(total-sum):
print("YES")
sys.exit(0)
else:
DFS(L+1, sum+a[L])
DFS(L+1, sum)
if __name__=="__main__":
n=int(input())
a=list(map(int, input().split()))
total=sum(a)
DFS(0, 0)
print("NO")
差異
Reference
この問題について(ホモサブセット), 我々は、より多くの情報をここで見つけました https://velog.io/@lsj8706/합이-같은-부분집합テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol