栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

状压dp(蓝桥杯补给)(python)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

状压dp(蓝桥杯补给)(python)

旅行商的变种题,区别在于经历过的地点还可以过去,所以动态转移方程为:

dp[i][state]=min(dp[j][sub]+dis[i][j]) if state&(1<

其中,sub 是 (1<

Python真的离谱, 跑啥都跑不过去,慢死 ,只跑了50%

code:

import copy

n,d=map(int,input().split())
l=[]
for o in range(n):
    mid=list(map(int,input().split()))
    l.append(mid[:])
def ji(x1,y1,x2,y2):
    return ((x1-x2)**2+(y1-y2)**2)**0.5
inf=float('inf')
dis=[[inf for i in range(n)]for i in range(n)]
for   i in range(n):
    for j in range(i+1,n):
        ans=ji(l[i][0],l[i][1],l[j][0],l[j][1])
        if ans<=d:
            dis[i][j]=dis[j][i]=ans


def dj(s,e):
    if s==e:
        return 0
    visit=copy.deepcopy(dis[s])
    visited=[0]*n
    visited[s]=1

    ind=s
    while True:
        mid = inf
        for i in range(n):
            if visited[i]==0 and visit[i]< mid:
                mid=visit[i]
                ind=i
        if ind==e:
            return visit[ind]

        visited[ind]=1
        for j in range(n):
            if visited[j] ==0 and visit[j]>visit[ind]+dis[ind][j]:
                visit[j] = visit[ind] + dis[ind][j]
dp=[[0 for i in range(1< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/951724.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号