题目链接:http://poj.org/problem?id=3311

题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短。最后输出最短距离即可。注意:每一个地方可重复访问多次。

经典的状压dp,因为每次送外卖不超过10个地方,可以压缩。

由于题中明确说了两个城市间的直接可达路径(即不经过其它城市结点)不一定是最短路径,所以需要借助floyd首先求出任意两个城市间的最短距离。

然后,在此基础上来求出遍历各个城市后回到出发点的最短路径的距离,即求解TSP问题。

代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. using namespace std;
  6. #define ll long long
  7. const int maxn=1e5+;
  8. const int INF=0x3f3f3f3f;
  9.  
  10. int dp[<<][];
  11. int d[][];
  12. int n;
  13.  
  14. void floyd() ///多源最短路,任意两点之间的距离都是最短的
  15. {
  16. for(int k=; k<=n; k++)
  17. for(int i=; i<=n; i++)
  18. for(int j=; j<=n; j++)
  19. d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
  20. }
  21.  
  22. ///dp[i][j]表示已经走过的城市为i,当前所在的城市为j的最短路程。
  23. ///相应的状态转移方程为dp[i][j]=min(dp[i^(1<<j)][k]+d[k][j]);
  24. ///i^(1<<j)的意思是将j这个城市从i状态中去掉。 d[k][j] 是k和j之间的距离。
  25. void DP()
  26. {
  27. for(int i=; i<(<<n); i++)
  28. for(int j=; j<=n; j++)
  29. {
  30. int tmp=<<(j-);
  31. if(tmp==i) dp[i][j]=d[][j];
  32. else if(tmp&i)
  33. {
  34. dp[i][j]=INF;
  35. for(int k=; k<=n; k++)
  36. if(k!=j && (i&(<<(k-))))
  37. dp[i][j]=min(dp[i][j],dp[i^tmp][k]+d[k][j]);
  38. }
  39. }
  40. int x=(<<n)-;
  41. int ans=INF;
  42. for(int i=; i<=n; i++)
  43. ans=min(ans,dp[x][i]+d[i][]);
  44. printf("%d\n",ans);
  45. }
  46.  
  47. int main()
  48. {
  49. //freopen("in.txt","r",stdin);
  50. while(scanf("%d",&n)== && n)
  51. {
  52. for(int i=; i<=n; i++)
  53. for(int j=; j<=n; j++)
  54. scanf("%d",&d[i][j]);
  55.  
  56. floyd();
  57. DP();
  58. }
  59. return ;
  60. }

poj3311 TSP经典状压dp(Traveling Saleman Problem)的更多相关文章

  1. DAG求最短路--TSP变形--状压dp

    DAG状压dp的一种 题目: $m$个城市,$n$张车票,第i张车票上的时间是$t_i$, 求从$a$到$b$的最短时间,如果无法到达则输出“impossible” 解法: 考虑状态:“现在在城市$v ...

  2. hoj 2662 经典状压dp // MyFirst 状压dp

    题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=2662 1.引言:用dp解决一个问题的时候很重要的一环就是状态的表示,一般来说,一个数组即可保存状态. ...

  3. POJ2288 Islands and Bridges(TSP:状压DP)

    求一个图的哈密顿路径的最大权及其路径数.显然状态压缩+DP. dp[v][u][S] 表示从v走到当前顶点 u且走过的顶点集合是S的 最大权值和方案数 这题我用记忆化搜索,从终点开始递归进行,感觉这样 ...

  4. POJ 1185 经典状压dp

    做了很久的题 有注释 #include<stdio.h> #include<string.h> #include<algorithm> #include<ma ...

  5. HDU 1074 Doing Homework(经典状压dp)

    题目链接  Doing Homework        Ignatius has just come back school from the 30th ACM/ICPC. Now he has a ...

  6. poj -1185 炮兵阵地 (经典状压dp)

    http://poj.org/problem?id=1185 参考博客:http://poj.org/problem?id=1185 大神博客已经讲的很清楚了,注意存状态的时候是从1开始的,所以初始化 ...

  7. 【BZOJ1087】 [SCOI2005]互不侵犯King 状压DP

    经典状压DP. f[i][j][k]=sum(f[i-1][j-cnt[k]][k]); cnt[i]放置情况为i时的国王数量 前I行放置情况为k时国王数量为J #include <iostre ...

  8. POJ3311 Hie with the Pie 【状压dp/TSP问题】

    题目链接:http://poj.org/problem?id=3311 Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total ...

  9. Hie with the Pie(POJ3311+floyd+状压dp+TSP问题dp解法)

    题目链接:http://poj.org/problem?id=3311 题目: 题意:n个城市,每两个城市间都存在距离,问你恰好经过所有城市一遍,最后回到起点(0)的最短距离. 思路:我们首先用flo ...

随机推荐

  1. sqlserver事务加锁机制

    锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏 ...

  2. [转]Oracle10g数据库自动诊断监视工具(ADDM)使用指南

    第一章 ADDM简介                 在Oracle9i及之前,DBA们已经拥有了很多很好用的性能分析工具,比如,tkprof.sql_trace.statspack.set even ...

  3. Android之Linearlayouy线性布局

    写了个小例子xml代码如下: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout x ...

  4. empty和isset函数详解

    1.empty函数 用途:检测变量是否为空 若变量不存在则返回 TRUE 若变量存在且其值为"".0."0".NULL..FALSE.array().var $ ...

  5. Spring MVC返回Map格式JSON数据

    问题描述: ajax中走error : function(e) {} 问题背景: 在测试controller层时,试过了ResponseEntity<ResponseModel>这种类型返 ...

  6. C#夯实基础之多线程三:线程的优先级

    一.为什么需要优先级--线程调度的问题 在现实生活中,优先级是一个很常见的现象:在火车站,如果你是孕妇,你是可以走进站中的专门绿色通道的,可以提前上火车以免拥挤:火警119匪警110出警的时候,都是人 ...

  7. 《转载》Spring MVC之@RequestBody, @ResponseBody 详解

    引言: 接上一篇文章讲述处理@RequestMapping的方法参数绑定之后,详细介绍下@RequestBody.@ResponseBody的具体用法和使用时机: 简介: @RequestBody 作 ...

  8. webbrower判断页面是否加载完成的好方法

    public void WaitPageCompleted(int timeOutSec) { ; ; j < timeOutSec * ; j++) { _wb.Invoke(new Acti ...

  9. DevExpress 创建EXCEL

    添加库引用:DevExpress.Data.v13.1.dll. DevExpress.Docs.v13.1.dll.DevExpress.Office.v13.1.Core.dll. DevExpr ...

  10. 【安装Redis】CentOS7 下安装NodeJs+Express+MongoDB+Redis

    Redis,V3.2,官网l官方链接:http://www.redis.io/download,参考:http://blog.csdn.net/mlks_2008/article/details/19 ...