Py照着标答为啥还是超时了四个点,求助!!
  • 板块P1433 吃奶酪
  • 楼主zsl_ayt
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/1/19 22:49
  • 上次更新2024/1/20 10:32:28
查看原帖
Py照着标答为啥还是超时了四个点,求助!!
1066716
zsl_ayt楼主2024/1/19 22:49
import math

n = int(input())

a = []
f = [[float('inf')] * 34000 for _ in range(20)]
d = [[0.0] * 20 for _ in range(20)]

for i in range(n):
    x, y = map(float, input().split())
    a.append([x, y])

a.insert(0, [0, 0])


def distance(i, j):
    return math.sqrt((a[i][0] - a[j][0]) ** 2 + (a[i][1] - a[j][1]) ** 2)


for i in range(n + 1):
    for j in range(i + 1, n + 1):
        d[i][j] = distance(i, j)
        d[j][i] = d[i][j]
for i in range(1, n + 1):
    f[i][1 << (i - 1)] = d[0][i]

for k in range(1, 1 << n):
    for i in range(1, n + 1):
        if (k & (1 << (i - 1))) == 0:
            continue

        for j in range(1, n + 1):
            if (k & (1 << (j - 1))) == 0:
                continue
            if i == j:
                continue

            f[i][k] = min(f[i][k], f[j][k - (1 << (i - 1))] + d[i][j])

ans = float('inf')
for i in range(1, n + 1):
    ans = min(ans, f[i][(1 << n) - 1])

print(f'{ans:.2f}')
2024/1/19 22:49
加载中...