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

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

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

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#define inf 100000000
using namespace std;
int dis[][];
int dp[<<][];
int n,ans;
int main(){
while(scanf("%d",&n)&&n){
for(int i=;i<=n;i++)for(int j=;j<=n;j++)scanf("%d",&dis[i][j]);
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
dis[i][j]=min(dis[i][k]+dis[k][j],dis[i][j]);
for(int S=;S<=(<<n)-;S++)
for(int i=;i<=n;i++){
if(S&(<<(i-)))//状态S中已经过城市i
{
if(S==(<<(i-))) dp[S][i]=dis[][i];
else{
dp[S][i]=inf;
for(int j=;j<=n;j++){
if(S&(<<(j-))&&i!=j)//枚举不是城市I的其他城市
dp[S][i]=min(dp[S^(<<(i-))][j]+dis[j][i],dp[S][i]);
}
}
}
}
int ans=inf;
for(int i=;i<=n;i++){
ans=min(ans,dp[(<<n)-][i]+dis[i][]);
}
printf("%d\n",ans);
}
return ;
}

改进了一下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#define inf 100000000
using namespace std;
int dis[][];
int dp[<<][];
int n,ans;
int main(){
while(scanf("%d",&n)&&n){
for(int i=;i<=n;i++)for(int j=;j<=n;j++)scanf("%d",&dis[i][j]);
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
dis[i][j]=min(dis[i][k]+dis[k][j],dis[i][j]);
for(int S=;S<=(<<(n+))-;S++)
for(int i=;i<=n;i++)
if(S&(<<i))//状态S中已经过城市i
{
if(S==(<<i)) dp[S][i]=dis[][i];
else{
dp[S][i]=inf;
for(int j=;j<=n;j++){
if(S&(<<j)&&i!=j)//枚举不是城市I的其他城市
dp[S][i]=min(dp[S^(<<i)][j]+dis[j][i],dp[S][i]);
}
}
}
printf("%d\n",dp[(<<(n+))-][]);
}
return ;
}

[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. iOS Code Signing: 解惑详解

    iPhone开发的代码签名 代码签名确保代码的真实以及明确识别代码的来源.在代码运行在一个开发系统以前,以及在代码提交到Apple发布以前,Apple要求所有的的应用程序都必须进行数字签名.另外,Ap ...

  2. 练习题目 :if for while else range、xrange、zip

    range在内存中直接生成指定的序列,当序列非常大时会浪费内存资源: xrange则不会直接生成一个list,而是每次调用返回其中的一个值,而非直接全部生成存于内存中 range([start,] s ...

  3. noVNC

    noNVC基础用法: 1.下载noVNC git clone https://github.com/novnc/noVNC.git 2.编辑qemu.conf配置文件 Vim /etc/libvirt ...

  4. 通过elasticsearch对日志进行搜索热词统计

    通过logstash搜集日志 这里搜集日志可以使用ELK的一个插件filebeat对日志进行处理,并传输到后端的程序 在这里有一个不好的地方, 如果想要直接使用filebeat将日志发送到elasti ...

  5. Oracle的基本操作

    一.ORACLE的启动和关闭 1.在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a.启动ORACLE系统 oracle>svrmgrl ...

  6. 3.微信小程序-B站:wxml和wxss文件

    WXML WXML(WeiXin Markup Language)是微信的一套标签语言,结合基础组件.事件系统,可以构建出页面的结构. (小安娜:好像很厉害的样子,那基础组件.事件系统是什么?感觉更厉 ...

  7. matlab中的科学记数法变成小数形式

    例如:假如rectx的形式在命令窗口显示: rectx = 1.0e+05 * 5.2294 5.2294 5.2294 5.2294 5.2294 那么,命令窗口输入vpa(rectx): ans ...

  8. 数据库+maven

    1.mysql <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-ja ...

  9. php 微信公众平台开发之微信群发信息

    这篇文章主要为大家详细介绍了php微信公众平台开发之微信群发信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.目的 完成在微信公众号中群发消息.这里只是完成简单的文字发送.也可以发送语音图片 ...

  10. Bootstrap-菜单,导航,按钮

    1.下拉菜单(基本用法) 在Bootstrap框架中的下拉菜单组件是一个独立的组件,根据不同的版本,它对应的文件: ☑  LESS版本:对应的源码文件为 dropdowns.less ☑  Sass版 ...