Algorithm(CodeTree, Python)/Backtracking

[코드트리] 수들의 합 최대화하기 Python

kurooru 2023. 2. 7. 12:45
# n 입력
n = int(input())
# grid 입력
grid = [
    list(map(int, input().split()))
    for _ in range(n)
]

# 함수들
# get_max_sum(curr_comb)
def get_max_sum(curr_comb):
    # curr_sum
    curr_sum = 0

    for i in range(n):
        curr_sum += grid[i][curr_comb[i]]
    
    # 반환
    return curr_sum

# simulate(curr_idx)
def simulate(curr_idx):
    # 전역 변수 선언
    global max_sum

    # 종료조건
    if curr_idx == n:
        # max_sum update
        max_sum = max(max_sum, get_max_sum(comb))
        return
    # 넣어주기
    for i in range(n):
        if visited[i]:
            continue
        comb.append(i)
        visited[i] = True

        simulate(curr_idx + 1)

        comb.pop()
        visited[i] = False

# 설계
# max_sum
max_sum = 0

# comb, visited
comb, visited = [], [False for _ in range(n+1)]

# simulate
simulate(0)

# 출력
print(max_sum)