状压dp,python,70分,tle,re求助
查看原帖
状压dp,python,70分,tle,re求助
988280
virgoasumita楼主2024/5/26 17:55
def dis(a, b):
    return ((a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2) ** 0.5


def main():
    n = int(input())
    ind = []
    for _ in range(n):
        x, y = map(int, input().split())
        ind.append((x, y))
    inf = float('inf')
    start = (0, 0)
    end = (1 << n) - 1
    dp = [[inf] * n for _ in range(1 << n)]
    dp[0][0] = 0
    ans = inf
    for i in range(n):
        dp[1 << i][i] = dis(start, ind[i])
    for i in range(1, 1 << n):
        for nex in range(n):
            for pre in range(n):
                if pre != nex and i & (1 << pre) and not i & (1 << nex):
                    distance = dis(ind[pre], ind[nex])
                    if i | (1 << nex) < 1 << n:
                        dp[i | (1 << nex)][nex] = min(dp[i | (1 << nex)][nex], dp[i][pre] + distance)
            ans = min(ans, dp[end][nex])
    # print(dp)
    return "%.2f" % ans


print(main())

2024/5/26 17:55
加载中...