python求助,用了DP,最后四个点没有过
  • 板块P1433 吃奶酪
  • 楼主xwzy5209
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/10 15:24
  • 上次更新2024/3/10 17:39:16
查看原帖
python求助,用了DP,最后四个点没有过
1247213
xwzy5209楼主2024/3/10 15:24
import sys 
input=lambda:sys.stdin.readline()
n = int(input())
F = [[9999999]*(1<<n) for _ in range(n+1)]
def distance(i, j):
    return ((x[i]-x[j])**2+(y[i]-y[j])**2)**(0.5)
x = [0.0]*(n+1)
y = [0.0]*(n+1)
for i in range(1, n+1):
    x[i], y[i] = map(float, input().split())
dis_mat = [[0.0]*(n+1) for _ in range(n+1)]
for i in range(n+1):
    for j in range(i+1, n+1):
        dis_mat[i][j] = distance(i,j)
        dis_mat[j][i] = dis_mat[i][j]
for i in range(1, n+1):
    F[i][1<<(i-1)] = dis_mat[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 i==j or (k&(1<<(j-1)))==0:
                continue
            F[i][k] = min(F[i][k], F[j][k-(1<<(i-1))]+dis_mat[i][j])
ans = min(F[i][(1<<n)-1] for i in range(1, n+1))
print("{:.2f}".format(ans))

2024/3/10 15:24
加载中...