题目传送门

题意:有中文版的

分析:(出题人的解题报告)我们首先需要预处理出任意两个国家之间的最短距离,因为数据范围很小,所以直接用Floyd就行了。之后,我们用f[S][i]表示访问国家的情况为S,当前最后访问的一个国家是i所需要的最小总油量,其中,S的二进制表示记录了访问国家的情况,S在二进制表示下的第i位(不管是从左往右还是从右往左都可以)如果是1则表示第i个国家被访问过了,否则表示第i个国家没有被访问过,那么f[S|(1<<i)][i]=min(f[S][j]+f[i][j]),其中i和j满足S&(1<<j)=1且S&(1<<i)=0。最开始时,除了f[1][1]是0,其他情况都是无穷大,之后先枚举S,再枚举i(我验题的时候因为这里搞反结果WA了),那么最终的答案就是min(f[(1<<n)-1][i]+f[i][1]),其中i\in∈[2,n]。总复杂度为O(n^3+n^2*2^n)O(n​3​​+n​2​​∗2​n​​)。

收获:暂时无,TSP没搞懂纯贴模板

代码:

  1. /************************************************
  2. * Author :Running_Time
  3. * Created Time :2015-8-22 18:55:17
  4. * File Name :B.cpp
  5. ************************************************/
  6.  
  7. #include <cstdio>
  8. #include <algorithm>
  9. #include <iostream>
  10. #include <sstream>
  11. #include <cstring>
  12. #include <cmath>
  13. #include <string>
  14. #include <vector>
  15. #include <queue>
  16. #include <deque>
  17. #include <stack>
  18. #include <list>
  19. #include <map>
  20. #include <set>
  21. #include <bitset>
  22. #include <cstdlib>
  23. #include <ctime>
  24. using namespace std;
  25.  
  26. #define lson l, mid, rt << 1
  27. #define rson mid + 1, r, rt << 1 | 1
  28. typedef long long ll;
  29. const int N = 1e5 + 10;
  30. const int INF = 0x3f3f3f3f;
  31. const int MOD = 1e9 + 7;
  32. int d[17][17];
  33. int dp[(1<<16)+10][17];
  34. int n, m;
  35.  
  36. int work(void) {
  37. for (int k=0; k<n; ++k) {
  38. for (int i=0; i<n; ++i) {
  39. for (int j=0; j<n; ++j) {
  40. d[i][j] = min (d[i][j], d[i][k] + d[k][j]);
  41. }
  42. }
  43. }
  44.  
  45. for (int i=0; i<(1<<n); ++i) {
  46. for (int j=0; j<n; ++j) dp[i][j] = INF;
  47. }
  48. dp[1][0] = 0;
  49. for (int i=0; i<(1<<n); ++i) {
  50. for (int j=0; j<n; ++j) {
  51. if (dp[i][j] != INF) {
  52. for (int k=0; k<n; ++k) {
  53. if (!(i>>k&1)) {
  54. dp[i|(1<<k)][k] = min (dp[i|(1<<k)][k], dp[i][j] + d[j][k]);
  55. }
  56. }
  57. }
  58. }
  59. }
  60.  
  61. int ans = INF;
  62. for (int i=0; i<n; ++i) {
  63. ans = min (ans, dp[(1<<n)-1][i] + d[i][0]);
  64. }
  65.  
  66. return ans;
  67. }
  68.  
  69. int main(void) {
  70. int T; scanf ("%d", &T);
  71. while (T--) {
  72. scanf ("%d%d", &n, &m);
  73. for (int i=0; i<n; ++i) {
  74. for (int j=0; j<n; ++j) d[i][j] = INF;
  75. }
  76. for (int u, v, w, i=1; i<=m; ++i) {
  77. scanf ("%d%d%d", &u, &v, &w); u--, v--;
  78. d[u][v] = min (d[u][v], w);
  79. d[v][u] = min (d[v][u], w);
  80. }
  81. for (int i=0; i<n; ++i) d[i][i] = 0;
  82. printf ("%d\n", work ());
  83. }
  84.  
  85. return 0;
  86. }

  

TSP+Floyd BestCoder Round #52 (div.2) 1002 Victor and Machine的更多相关文章

  1. 构造 BestCoder Round #52 (div.2) 1001 Victor and Machine

    题目传送门 题意:有中文版的 分析:首先要知道机器关闭后,w是清零的.所以一次(x + y)的循环弹出的小球个数是固定的,为x / w + 1,那么在边界时讨论一下就行了 收获:这种题目不难,理解清楚 ...

  2. 简单几何(水)BestCoder Round #50 (div.2) 1002 Run

    题目传送门 /* 好吧,我不是地球人,这题只要判断正方形就行了,正三角形和正五边形和正六边形都不可能(点是整数). 但是,如果不是整数,那么该怎么做呢?是否就此开启计算几何专题了呢 */ /***** ...

  3. BestCoder Round #52 (div.1)

    这周六BC和CF又差点打架,精力不够啊...结果打BC没起来,就看了一眼题跑了...今天早上补补吧,(因为今天晚上还要打UER= =) 先放官方题解: 1000 Victor and Machine ...

  4. BestCoder Round #52 (div.2) HDU 5418 Victor and World (DP+状态压缩)

    [题目链接]:pid=5418">click here~~ [题目大意]: 问题描写叙述 经过多年的努力,Victor最终考到了飞行驾照. 为了庆祝这件事,他决定给自己买一架飞机然后环 ...

  5. BestCoder Round #68 (div.2) 1002 tree

    题意:给你一个图,每条边权值0或1,问每个点周围最近的点有多少个? 思路:并查集找权值为0的点构成的连通块. #include<stdio.h> #include<string.h& ...

  6. BestCoder Round #50 (div.1) 1002 Run (HDU OJ 5365) 暴力枚举+正多边形判定

    题目:Click here 题意:给你n个点,有多少个正多边形(3,4,5,6). 分析:整点是不能构成正五边形和正三边形和正六边形的,所以只需暴力枚举四个点判断是否是正四边形即可. #include ...

  7. ACM学习历程—HDU5586 Sum(动态规划)(BestCoder Round #64 (div.2) 1002)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5586 题目大意就是把一段序列里面的数替换成f(x),然后让总和最大. 首先可以计算出初始的总和,以及每 ...

  8. BestCoder Round #73 (div.2)1002/hdoj5631

    题意: 给出一张 nnn 个点 n+1n+1n+1 条边的无向图,你可以选择一些边(至少一条)删除. 分析: 一张n个点图,至少n-1条边才能保证联通 所以可以知道每次可以删去1条边或者两条边 一开始 ...

  9. 素数+map BestCoder Round #54 (div.2) 1002 The Factor

    题目传送门 题意:给出一个数列,问数列的乘积的一个满足条件的最小因子是什么,没有输出-1.条件是不是素数 分析:官方题解:对于每一个数字,它有用的部分其实只有它的所有质因子(包括相等的).求出所有数的 ...

随机推荐

  1. SeaGlass:手工搭建伪基站监控系统

    “伪基站”即假基站,设备一般由主机和笔记本电脑或手机组成,通过短信群发器.短信发信机等相关设备能够搜取以其为中心.一定半径范围内的手机卡信息,利用2G移动通信的缺陷,通过伪装成运营商的基站,冒用他人手 ...

  2. 【原创】PHP扩展开发入门

    PHP扩展开发入门 作者:wf (360电商技术组) 在我们编写自己的第一个php扩展之前,先了解一下php的总体架构和执行机制. php的架构如图1所看到的. 当中一个重要的就是SAPI(serve ...

  3. MIT 操作系统实验 MIT JOS lab1

    JOS lab1 首先向MIT还有K&R致敬! 没有非常好的开源环境我不可能拿到这么好的东西. 向每个与我一起交流讨论的programmer致谢!没有道友一起死磕.我也可能会中途放弃. 跟丫死 ...

  4. 实习生面试相关-b

    面试要准备什么 有一位小伙伴面试阿里被拒后,面试官给出了这样的评价:“……计算机基础,以及编程基础能力上都有所欠缺……”.但这种笼统的回答并非是我们希望的答案,所谓的基础到底指的是什么? 作为一名 i ...

  5. hduoj2094产生冠军

     产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  6. Java基础面试:集合、内部类、线程

    package test; import java.util.Hashtable; import java.util.Map; public class test { public static St ...

  7. SQL Server索引原理解析

    此文是我之前的笔记整理而来,以索引为入口进行探讨相关数据库知识(又做了修改以让人更好消化).SQL Server接触不久的朋友可以只看以下蓝色字体字,简单有用节省时间:如果是数据库基础不错的朋友,可以 ...

  8. 嵌入式开发之davinci--- 8148/8168/8127 中的添加算饭scd 场景检测 文档简介

    Osd Scd (1)     Introduction over view a)         scene change detection block diagram a)         gr ...

  9. 错误 1 无法将程序集“NBear.Data.dll”复制到文件“D:\newbpm\bpm\SureBpm\Bin\NBear.Data.dll”。无法将“D:\newbpm\bpm\SureSoft.WebServiceBaseLib\bin\Debug\NBear.Data.dll”添加到网站。 无法添加文件“Bin\NBear.Data.dll”。 拒绝访问。 D:\..

    错误 1 无法将程序集“NBear.Data.dll”复制到文件“D:\newbpm\bpm\SureBpm\Bin\NBear.Data.dll”.无法将“D:\newbpm\bpm\SureSof ...

  10. docker大全集

    1,什么是docker docker 最初是dotCloud公司创始人 Solomon Hykes 在法国期间发起的一个公司内部醒目,于 2013年 3 月以 Apache 2.0 授权协议开源, 主 ...