题意:tsp问题,经过图中所有的点并回到原点的最短距离。

解题关键:floyd+状态压缩dp,注意floyd时k必须在最外层

转移方程:$dp[S][i] = \min (dp[S \wedge (1 <  < (i - 1))][k] + dis[k][j],dp[S][i])$

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<cstdlib>
  6. #include<cmath>
  7. #define inf 100000000
  8. using namespace std;
  9. int dis[][];
  10. int dp[<<][];
  11. int n,ans;
  12. int main(){
  13. while(scanf("%d",&n)&&n){
  14. for(int i=;i<=n;i++)for(int j=;j<=n;j++)scanf("%d",&dis[i][j]);
  15. for(int k=;k<=n;k++)
  16. for(int i=;i<=n;i++)
  17. for(int j=;j<=n;j++)
  18. dis[i][j]=min(dis[i][k]+dis[k][j],dis[i][j]);
  19. for(int S=;S<=(<<n)-;S++)
  20. for(int i=;i<=n;i++){
  21. if(S&(<<(i-)))//状态S中已经过城市i
  22. {
  23. if(S==(<<(i-))) dp[S][i]=dis[][i];
  24. else{
  25. dp[S][i]=inf;
  26. for(int j=;j<=n;j++){
  27. if(S&(<<(j-))&&i!=j)//枚举不是城市I的其他城市
  28. dp[S][i]=min(dp[S^(<<(i-))][j]+dis[j][i],dp[S][i]);
  29. }
  30. }
  31. }
  32. }
  33. int ans=inf;
  34. for(int i=;i<=n;i++){
  35. ans=min(ans,dp[(<<n)-][i]+dis[i][]);
  36. }
  37. printf("%d\n",ans);
  38. }
  39. return ;
  40. }

改进了一下:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<cstdlib>
  6. #include<cmath>
  7. #define inf 100000000
  8. using namespace std;
  9. int dis[][];
  10. int dp[<<][];
  11. int n,ans;
  12. int main(){
  13. while(scanf("%d",&n)&&n){
  14. for(int i=;i<=n;i++)for(int j=;j<=n;j++)scanf("%d",&dis[i][j]);
  15. for(int k=;k<=n;k++)
  16. for(int i=;i<=n;i++)
  17. for(int j=;j<=n;j++)
  18. dis[i][j]=min(dis[i][k]+dis[k][j],dis[i][j]);
  19. for(int S=;S<=(<<(n+))-;S++)
  20. for(int i=;i<=n;i++)
  21. if(S&(<<i))//状态S中已经过城市i
  22. {
  23. if(S==(<<i)) dp[S][i]=dis[][i];
  24. else{
  25. dp[S][i]=inf;
  26. for(int j=;j<=n;j++){
  27. if(S&(<<j)&&i!=j)//枚举不是城市I的其他城市
  28. dp[S][i]=min(dp[S^(<<i)][j]+dis[j][i],dp[S][i]);
  29. }
  30. }
  31. }
  32. printf("%d\n",dp[(<<(n+))-][]);
  33. }
  34. return ;
  35. }

[poj3311]Hie with the Pie(Floyd+状态压缩DP)的更多相关文章

  1. POJ 3311 Hie with the Pie(Floyd+状态压缩DP)

    题是看了这位的博客之后理解的,只不过我是又加了点简单的注释. 链接:http://blog.csdn.net/chinaczy/article/details/5890768 我还加了一些注释代码,对 ...

  2. poj 3311 Hie with the Pie(状态压缩dp)

    Description The Pizazz Pizzeria prides itself or more (up to ) orders to be processed before he star ...

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

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

  4. POJ 3311 Hie with the Pie floyd+状压DP

    链接:http://poj.org/problem?id=3311 题意:有N个地点和一个出发点(N<=10),给出全部地点两两之间的距离,问从出发点出发,走遍全部地点再回到出发点的最短距离是多 ...

  5. HDU 5418 Victor and World (Floyd + 状态压缩DP)

    题目大意:从起点 1 开始走遍所有的点,回到起点 1 ,求出所走的最短长度. 思路:首先利用 Floyed 求出任意两点之间的最短距离 dis[i][j].求出任意两点之间的最短距离后,运用动态规划. ...

  6. TZOJ 1937 Hie with the Pie(floyd+状压dp)

    描述 The Pizazz Pizzeria prides itself in delivering pizzas to its customers as fast as possible. Unfo ...

  7. POJ3311 Hie with the Pie(状压DP,Tsp)

    本题是经典的Tsp问题的变形,Tsp问题就是要求从起点出发经过每个节点一次再回到起点的距离最小值,本题的区别就是可以经过一个节点不止一次,那么先预处理出任意两点之间的最短距离就行了,因为再多走只会浪费 ...

  8. poj 3311(floyd+状态压缩)

    题目链接:http://poj.org/problem?id=3311 思路:Floyd + 状态压缩DP  题意是有N个城市(1~N)和一个PIZZA店(0),要求一条回路,从0出发,又回到0,而且 ...

  9. POJ 3311 Hie with the Pie(状压DP + Floyd)

    题目链接:http://poj.org/problem?id=3311 Description The Pizazz Pizzeria prides itself in delivering pizz ...

随机推荐

  1. 使用documentFragment

    function insertHtml(range, val) { var doc = range.doc, frag = doc.createDocumentFragment(); K('@' + ...

  2. Android SDK上手指南1:应用程序结构

    一直说要学java要学android开发,可是一直胡乱地忙活这忙活那,之前开始学了一点也中断了.说是没时间,都是借口,回顾一下自己的生活感觉缺少点激情,没有什么奋斗的动力,所以好多时间就浪费了.刚刚考 ...

  3. [原创]Scala学习:流程控制,异常处理

    1.流程控制 1)do..while def doWhile(){ var line="" do{ line = readLine() println("readline ...

  4. 【BZOJ4361】isn

    题目 [BZOJ4361]isn 做法 \(dp_{i,j}\)表示以\(i\)结尾\(j\)长度,树状数组\(tree_{i,j}\)表长度为\(i\),以\(<=j\)结尾的个数,显然\(d ...

  5. Python 注释和中文乱码

    Python 注释分为三种: 1.单行注释:# 2.多行注释:前后3个单引号,或者三个双引号: 如:''' 多行注释 ''', """或者 多行注释 '"&qu ...

  6. Spring Cloud之统一fallback接口

    每个方法都配备一个fallback方法 不利于开发的 用类的方式 并且整个方法都是在同一个线程池里面的 主要对于client的修改: pom: <project xmlns="http ...

  7. 3.流程定义的CRUD

    表 _re_是仓库的简写 /itcast0711/src/main/java/cn/itcast/b_processDefinition/ProcessDefinitionTest.java pack ...

  8. css 采集下载

    软件应用范围: 看到喜欢的网页,另存为的话,并不能直接保存css中引用的图片. 那么就有了本软件的用武之地. 亮点:自动匹配文件内的相对路径.css内图片地址值md5保存,用来避免不同文件夹同名文件的 ...

  9. Android 基础-3.0 数据存储方式

    Android几种数据存储方式 文件存储 SharedPreference存储 Json解析 SQLite数据库存储 文件存储 文件存储是Android中最基本的一种存储方式,和Java中实现I/O的 ...

  10. 分享知识-快乐自己:Struts2 前台日期到后台的日期格式转换

    案例目录: 关键代码展示: DateConverter: package com.mlq.util; import com.opensymphony.xwork2.conversion.TypeCon ...