问题可以转换为:

从0出发途径每个城市至少一次返回0求最短路径:

解法:动态规划(状压dp)+Floyd预处理最短路径(从一个城市到另一个城市走最短路即可,不需考虑途径什么城市)

【动态规划笔记】状压dp:旅行商问题_m0_52043808的博客-CSDN博客

初始化路径:如果两个城市直接的距离大于D,设为INF

注意:不能用memset初始化double数组

#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
//?调试
using namespace std;
const int INF=1e9;
int n,D;
struct site{int x,y;
}s[21];
double dist(site a,site b){return sqrt((a.x-b.x)*(a. x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double dis[20][20];
double dp[1<<18][20];
void init_dis(){for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(dist(s[i],s[j])<=D)dis[i][j]=dist(s[i],s[j]);elsedis[i][j]=INF;}}
}
void Floyd(){
for(int k=0;k<n;k++){for(int i=0;i<n;i++){for(int j=0;j<n;j++){       dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);}}}
}
void out_dis(){for(int i=0;i<n;i++){for(int j=0;j<n;j++){cout<<dis[i][j]<<" "; }cout<<endl;}
}
void out_dp(){for(int s=0;s<1<<n;s++){for(int i=0;i<n;i++){cout<<dp[s][i]<<" ";}cout<<endl;}
}
int main(){cin>>n>>D;for(int i=0;i<n;i++){cin>>s[i].x>>s[i].y;}init_dis();Floyd();for(int s=0;s<(1<<n);s++){for(int i=0;i<n;i++){dp[s][i]=1e9;}}dp[1][0]=0;for(int s=0;s<(1<<n);s++){for(int i=0;i<n;i++){if(s&(1<<i)){for(int j=0;j<n;j++){if(i!=j&&(s&(1<<j))){dp[s][i]=min(dp[s][i],dp[s^1<<i][j]+dis[j][i]);}}}}}double res=INF;for(int i=1;i<n;i++){res=min(res,dp[(1<<n)-1][i]+dis[i][0]);}printf("%.2f",res);} 

【动态规划】状压dp:蓝桥2020补给(旅行商问题)相关推荐

  1. 动态规划 —— 状压 DP

    [概述] 通常将以一个集合内的元素信息作为状态且状态总数为指数级别的动态规划称为状态压缩动态规划. 其是一类以集合信息为状态的特殊的动态规划问题,主要有传统集合动态规划与基于连通性状态压缩的动态规划两 ...

  2. 【动态规划 状压dp】JZOJ_6316 djq的朋友圈

    题意 给出一张图,有若干点之间连边,边权∈{0,1}\in\{0,1\}∈{0,1},对于点1,与它直接连边的点且边权为0,就是盟友,否则是情敌:间接连边,就要按某种顺序同时列出它们的熟人,如果关系相 ...

  3. 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II

    文章目录 --2020年12月20日(周日)------------------ 状压DP 一.最短Hamilton路径(模板题) 二.玉米田(P1879 [USACO06NOV]Corn Field ...

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

    试题 历届真题 补给[第十一届][决赛][B组] 提交此题   评测记录 资源限制 内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制 ...

  5. 糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) Apare_xzc

    糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) xzc 2019/4/5 试题 I: 糖果 时间限制: 1.0s 内存限制: 256.0MB 本题总分:25分 [问题描述]    ...

  6. HDU-3001(旅行商问题+三进制状压dp)

    #include <bits/stdc++.h> using namespace std; /* 题目大意: 给定n个点m条边的带权无向图,问有没有可能从n个点的其中一个出发,走遍其余n ...

  7. 牛客题单_动态规划课程状压dp习题

    牛客题单_动态规划课程状压dp习题 文章目录 牛客题单_动态规划课程状压dp习题 NC14732 锁 NC15034 德玛西亚万岁 NC16418 宝藏 NC17061 多彩的树 NC17890 方格 ...

  8. [蓝桥杯][算法提高VIP]Sharing Chocolate(状压dp记忆化搜索)

    题目描述 每天,巧克力在它的许多形式上被全世界数百万人分享.它是一个真正普遍的糖果,实际上在世界上每个国家都能得到. 你发现唯一比吃巧克力更好的事情是把它分享给朋友.不幸的是,你的朋友非常挑剔,有着不 ...

  9. [蓝桥杯][2019年第十届真题]糖果(状压dp)

    题目描述 糖果店的老板一共有 M 种口味的糖果出售.为了方便描述,我们将 M 种 口味编号 1 ∼ M. 小明希望能品尝到所有口味的糖果.遗憾的是老板并不单独出售糖果,而 是 K 颗一包整包出售. 幸 ...

最新文章

  1. iOS autolayout
  2. python类的继承--------类的基础(四)
  3. 【树莓派】【转载】基于树莓派,制作家庭媒体中心+下载机
  4. 数据结构学习工具总结
  5. lambda ::_Lambda项目:迈向多核及超越
  6. Mask-SLAM:基于语义分割掩模的鲁棒特征单目SLAM
  7. Human_height
  8. mysql-电商库演练2-拆表-修改字段-添加外键
  9. 企业网络营销意识的重要性
  10. 替代密码的c语言程序,替代密码及置换密码的C语言实现.doc
  11. 【译】Serverless Jenkins with Jenkins X
  12. 如何高效工作,享受品质生活?看看少数派的经验总结吧
  13. gcc/g++ 静态动态库 混链接.
  14. 软件测试,从零开始:测试新手入门必读
  15. source insight设置Courier new字体
  16. 华南理工大学811信号与系统真题
  17. Linux和onenote很像的软件,Microsoft OneNote替代方案?
  18. 深入探索WebSockets
  19. 服务器和客户端TSL协议不一致
  20. 3GPP TS 23501-g51 中英文对照 | 4.4.5 Application Triggering Services

热门文章

  1. Linux 学习手记(5):使用Vim文本编辑器
  2. 终于有了自己的域名了
  3. AT SELECTION-SCREEN
  4. 51Nod-1284 2 3 5 7的倍数【数位DP+记忆化搜索】
  5. UVA10110 Light, more light【数学】
  6. Bailian2765 POJ NOI0113-03 八进制小数【进制】
  7. CCF NOI1008 水仙花数
  8. I00032 约瑟夫环(Joseph problem)
  9. 辨异 —— 逻辑之辨、人文社科观念
  10. 实用的 Python —— base64