大意:
一个人要送n份货,给出一个矩阵,表示任意两个点间的直接路径长度,求从起点0送完这n份货(到达指定的n个地点)再回到起点0的最短时间。
经过任意顶点的次数不限。

分析:既然是可以过多个点,那我们可以想到先用FD算法求出两两顶点的最短路,

dp[i][j]表示在状态i的条件下到点j的最短时间,显然如果i == (1 << (j - 1)),表示从只经过点j,这时候dp[i][j] = dis[0][j],否则就是要经过别的点到达j
这里枚举当前状态下经过的除了j的其他点,注意一定是当前状态下,采用类似Floyd的思想
最后dp[(1 << n) - 1][i]表示经过了所有点到达i,只要枚举dp[(1 << n) - 1][i] + dis[i][0]的最小值即可

#include<stdio.h>
#include<algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = ;
int n;
int dp[<<maxn][maxn];///dp[i][j]表示在状态i的条件下到点j的最短时间
int mp[maxn][maxn];/// 图,邻接矩阵,初始时记录顶点之间的原始距离,后来记录顶点之间的最短距离
void FD( )
{
for(int k= ; k<=n ; k++)
for(int i= ; i<=n ; i++)
for(int j= ; j<=n ; j++)
if(mp[i][j]>mp[i][k]+mp[k][j])
mp[i][j]=mp[i][k]+mp[k][j];
}
int main( )
{
while(scanf("%d",&n)!=EOF)
{
if(n==)
break;
for(int i= ; i<=n ; i++)
for(int j= ; j<=n ; j++)
scanf("%d",&mp[i][j]);
FD( );
for ( int i = ; i <= ( << n) - ; i++ ) { /// 枚举 所有的状态/所有组合
for ( int j = ; j <= n; j++ )
{
if ( i == ( << (j - )) ) /// 初始值
dp[i][j] = mp[][j]; /// dp[i][j]:在状态i的条件下到点j的最短时间
else
{
dp[i][j] = INF;
for ( int k = ; k <= n; k++ )//( i & (1 << (k - 1)) )判断第k位是否位1,也就是判断是否可以进过k点
if ( ( k != j ) && ( i & ( << (k - )) ) ) /// 当前状态下
dp[i][j] = min( dp[i][j], dp[i ^ ( << (j - ))][k] + mp[k][j] );
}
}
} int ans = dp[( << n) - ][] + mp[][];
for ( int i = ; i <= n; i++ ) /// 找出最短的回路
ans = min( ans, dp[( << n) - ][i] + mp[i][] );
printf ( "%d\n", ans ); }
return ;
}

Hie with the Pie(状压DP+可以经过多次相同的点要全部走过的最短回路)的更多相关文章

  1. POJ 3311 Hie with the Pie (状压DP)

    dp[i][j][k] i代表此层用的状态序号 j上一层用的状态序号 k是层数&1(滚动数组) 标准流程 先预处理出所有合法数据存在status里 然后独立处理第一层 然后根据前一层的max推 ...

  2. 【鸽】poj3311 Hie with the Pie[状压DP+Floyd]

    题解网上一搜一大坨的,不用复述了吧. 只是觉得网上dp方程没多大问题,但是状态的表示含义模糊.不同于正常哈密顿路径求解,状态表示应当改一下. 首先定义一次移动为从一个点经过若干个点到达另一个点,则$f ...

  3. East Central North America 2006 Hie with the Pie /// 状压dp oj22470

    题目大意: 输入n,有n个地方(1~n)需要送pizza pizza点为0点 接下来n+1行每行n+1个值 表示 i 到 j 的路径长度 输出从0点到各点送pizza最后回到0点的最短路(点可重复走) ...

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

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

  5. 状压dp+floyed(C - Hie with the Pie POJ - 3311 )

    题目链接:https://cn.vjudge.net/contest/276236#problem/C 题目大意: 给你一个有n+1(1<=n<=10)个点的有向完全图,用矩阵的形式给出任 ...

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

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

  7. poj 3311 Hie with the Pie 经过所有点(可重)的最短路径 floyd + 状压dp

    题目链接 题意 给定一个\(N\)个点的完全图(有向图),求从原点出发,经过所有点再回到原点的最短路径长度(可重复经过中途点). 思路 因为可多次经过同一个点,所以可用floyd先预处理出每两个点之间 ...

  8. POJ 3311 Hie with the Pie (状压DP)

    题意: 每个点都可以走多次的TSP问题:有n个点(n<=11),从点1出发,经过其他所有点至少1次,并回到原点1,使得路程最短是多少? 思路: 同HDU 5418 VICTOR AND WORL ...

  9. 【POJ3311】Hie with the Pie(状压DP,最短路)

    题意: 思路:状压DP入门题 #include<cstdio> #include<cstdlib> #include<algorithm> #include< ...

随机推荐

  1. python爬虫框架(2)--PySpider框架安装配置

    1.安装 1.phantomjs PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速.原生支持各种Web标准:DOM 处理 ...

  2. elmah数据库sql脚本

    /* 错误管理工具 SQL代码 */CREATE TABLE dbo.ELMAH_Error( ErrorId UNIQUEIDENTIFIER NOT NULL, Application NVARC ...

  3. android 中context的具体作用和意义

    context在android中是非常重要的一个类,此类一般用于activity之中 从字面意思来看,这是环境变量,内部实现了一些方法,但是此类也可以看做是一个句柄,用来唯一标示activity 举个 ...

  4. solr :term 查询, phrase查询, boolean 查询

    搜索总体有:term 查询, phrase查询, boolean 查询 1. SOLR搜索覆盖度和准确度保证的三个搜索方式: 保证准确率: AND: Search for two different ...

  5. 思考题-关于CSS(转)

    dl, dt, dd三个标签浏览器默认margin值多少?是否有标签默认文字粗体? line-height:150%和line-height:1.5的区别是? float为何会让外部容器高度塌陷?这是 ...

  6. 框架之 hibernate之二

    1. Hibernate持久化对象的状态 2. Hibernate的一级缓存 3. Hibernate操作持久化对象的方法 4. Hibernate的基本查询 Hibernate的持久化类 什么是持久 ...

  7. 2018网络预选赛 徐州H 线段树+树状数组

    设读入的数组是a,树状数组用来维护a数组区间和sum,线段树用来维护一个另一个数组ssum的区间和,区间每个点a[i]*(n-i+1),那么l-r的答案是l-r的ssum-(n-r)*(sum[r]- ...

  8. 获取当前设备的CPU个数

    public class Test { public static void main(String[] args) { //获取当前设备的CPU个数 int availableProcessors ...

  9. HDOJ 1164 Eddy's research

    上一篇已经讲了,但是转载别人的很乱,这里自己根据blog里面写的思路,重新写过了一个程序 #include <iostream> #include <malloc.h> #in ...

  10. Mind Map-在线软件(转)

     From http://blog.sina.com.cn/s/blog_74b687ac0102dtp1.html 第一款:http://tu.mindpin.com/ 用非常简单, 先用Email ...