[アルゴリズム]白準開始とリンク(14889回)Python
2311 ワード
コンポジット
nの範囲は最大20である.
そのためO(n^3)もタイムアウトしていません.
の組み合わせによって各グループのメンバーが決定され、再びメンバーの2名が順番にペアリングされる. 計算関数の時間複雑度はO(n^2)であった. とは逆に、より簡単な実装方法がある. teama,Bが決まると2(1人あたり2名)で、ドアで値上げします. もちろん同じ時間複雑度はO(N^2)ですが、コードは簡単になります. 時間の複雑さを低減するためにdfsを用いることができる.
奥応?!長さは短くなりましたが、もっと時間がかかります…?ライブラリの方が効率的なようですね
nの範囲は最大20である.
そのためO(n^3)もタイムアウトしていません.
My solution
from itertools import combinations, permutations
# Calculate diff of teamA and teamB
def calculate(teamA, teamB):
global stats
sumA = 0
sumB = 0
memsA = permutations(teamA, 2)
memsB = permutations(teamB, 2)
for memA in memsA:
sumA += stats[memA[0]][memA[1]]
for memB in memsB:
sumB += stats[memB[0]][memB[1]]
result = abs(sumA - sumB)
return result
# Initialize values
answer = 0
n = int(input())
stats = [[0 for j in range(n)] for i in range(n)]
# Input values
for i in range(n):
stats[i] = list(map(int, input().split()))
# Deside members of team A, B for combination
teamA = list(combinations(range(n), int(n/2)))
for idx in range(len(teamA)):
teamB = [k for k in range(n) if k not in teamA[idx]]
tmp = calculate(teamA[idx], teamB)
if idx == 0:
answer = tmp
elif tmp < answer:
answer = tmp
print(answer)
補足すべき点
補足コード
from itertools import combinations, permutations
# Initialize values
answer = 0
n = int(input())
stats = [[0 for j in range(n)] for i in range(n)]
# Input values
for i in range(n):
stats[i] = list(map(int, input().split()))
# Deside members of team A, B for combination
teamA = list(combinations(range(n), int(n/2)))
for idx in range(len(teamA)):
sumA = 0
sumB = 0
teamB = [k for k in range(n) if k not in teamA[idx]]
# Find sumA, sumB and diff
for x in teamA[idx]:
for y in teamA[idx]:
if x != y:
sumA += stats[x][y]
for x in teamB:
for y in teamB:
if x != y:
sumB += stats[x][y]
tmp = abs(sumA - sumB)
# Find min value
if idx == 0:
answer = tmp
elif tmp < answer:
answer = tmp
print(answer)
奥応?!長さは短くなりましたが、もっと時間がかかります…?ライブラリの方が効率的なようですね
Reference
この問題について([アルゴリズム]白準開始とリンク(14889回)Python), 我々は、より多くの情報をここで見つけました https://velog.io/@soddong/알고리즘-백준-스타트와-링크14889번-Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol