题目大意:

输入n,有n个地方(1~n)需要送pizza

pizza点为0点

接下来n+1行每行n+1个值

表示 i 到 j 的路径长度

输出从0点到各点送pizza最后回到0点的最短路(点可重复走)

Sample Input

3
0 1 10 10
1 0 1 2
10 1 0 10
10 2 10 0
0

Sample Output

8

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int n,G[][],dp[][];
/// dp[状态][当前点]=路径长度,G[i][j]= i 到 j 的最短路长度
/// 状态 即当该数的二进制为01011时,说明0 1 3点已走过,而2 4没有
void solve()
{
int ed=(<<(n+))-;
/// ed的二进制表示所有点都走过
/* 如 当n=3
1(00001)<<(n+1)=16(10000)
16(10000)-1=15(01111)*/ memset(dp,INF,sizeof(dp));// INF表示不存在
dp[][]=;/// 一开始已经在0点,0点为pizza店
for(int i=;i<=ed;i++)
{
if(!(i&)) continue;
/// 取0点已走过的状态 0点没走过的状态不用考虑 for(int j=;j<=n;j++)
{// 若目前不存在 i状态时位于j点的可能 则忽略
if(dp[i][j]==INF) continue; // 不存在 for(int k=;k<=n;k++) // 枚举所有点
/// 从 i 状态延伸到 k 点已走过的状态
if(j!=k) dp[i|(<<k)][k]= // 则更新
min(dp[i|(<<k)][k],dp[i][j]+G[j][k]);
}
}
printf("%d\n",dp[ed][]);
}
int main()
{
while(~scanf("%d",&n)&&n)
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
scanf("%d",&G[i][j]);
for(int i=;i<=n;i++) /// floyd更新G[][],求各点间的最短路
for(int j=;j<=n;j++)
for(int k=;k<=n;k++)
if(G[j][k]>G[j][i]+G[i][k])
G[j][k]=G[j][i]+G[i][k];
solve();
}
return ;
}

East Central North America 2006 Hie with the Pie /// 状压dp oj22470的更多相关文章

  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. MPI Maelstrom(East Central North America 1996)(poj1502)

    MPI Maelstrom 总时间限制:  1000ms 内存限制:  65536kB 描述 BIT has recently taken delivery of their new supercom ...

  4. poj 2732 Countdown(East Central North America 2005)

    题意:建一个家庭树,找出有第d代子孙的名字,按照要求的第d代子孙的数从大到小输出三个人名,如果有一样大小子孙数的,就按字母序从小到大将同等大小的都输出,如果小于三个人的就全输出. 题目链接:http: ...

  5. East Central North America Region 2015

    E 每过一秒,当前点会把它的值传递给所有相邻点,问t时刻该图的值 #include <iostream> #include <cstdio> #include <algo ...

  6. Gym-101673 :East Central North America Regional Contest (ECNA 2017)(寒假自训第8场)

    A .Abstract Art 题意:求多个多边形的面积并. 思路:模板题. #include<bits/stdc++.h> using namespace std; typedef lo ...

  7. POJ 1240 Pre-Post-erous! && East Central North America 2002 (由前序后序遍历序列推出M叉树的种类)

    题目链接 问题描述 : We are all familiar with pre-order, in-order and post-order traversals of binary trees. ...

  8. 2017-2018 ACM-ICPC East Central North America Regional Contest (ECNA 2017) Solution

    A:Abstract Art 题意:给出n个多边形,求n个多边形分别的面积和,以及面积并 思路:模板 #include <bits/stdc++.h> using namespace st ...

  9. 2016-2017 ACM-ICPC East Central North America Regional Contest (ECNA 2016) F 区间dp

    Problem F Removal GameBobby Roberts is totally bored in his algorithms class, so he’s developed a li ...

随机推荐

  1. Hbase和Hive在大数据架构中处在不同位置

    先放结论:Hbase和Hive在大数据架构中处在不同位置,Hbase主要解决实时数据查询问题,Hive主要解决数据处理和计算问题,一般是配合使用.一.区别:Hbase: Hadoop database ...

  2. Javascript下拉刷新

    Html相关代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  3. NX二次开发-UFUN读取工程图注释UF_DRF_ask_text_data

    1 NX11+VS2013 2 3 4 #include <uf.h> 5 #include <uf_ui.h> 6 #include <uf_drf.h> 7 8 ...

  4. vuex存数据,防止刷新数据丢失

    1 created() { 2 if (sessionStorage.getItem('store')) { 3 this.$store.replaceState(Object.assign({}, ...

  5. Perl 数组应用详解(push, pop, shift, unshift)

    Perl的数组操作有四大常用函数: push:从数组的末尾加入元素.pop :从数组的末尾取出元素 shift: 从数组的开头取出元素unshift:从数组的开头加入元素 1.push #!/usr/ ...

  6. Tomcat下载部署及解决中文乱码显示

    一.下载 tomcat下载链接:https://tomcat.apache.org/ 1.进入tomcat官网后,我使用的是tomcat9,所以我选择tomcat9.然后点击core下的zip包下载. ...

  7. Python print命令/ 解压序列

    Python 命令参数  print 命令 : #默认的print是有个 空格,和换行的 # print(sep= ' ') # print(end = '/n') a = 'sunjinchao' ...

  8. seo具备的条件

    对于SEO这行业,许多想学习这一行,但是并非每一个人都有这样才能.因为SEO份这行靠是真材实料并非虚拟人才.现在找到高工资的SEO人才需要 有三年以上经验,熟悉PHP.html.asp.java等等这 ...

  9. 8张图带你轻松温习Java知识

    年初四好,一图胜千言,下面图解均来自Program Creek 网站,目前它们拥有最多的票选. 如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟. 1 字符串不变性 下面这张图展示了这段代码做了 ...

  10. linux使用nmon监控、分析系统性能

    linux使用nmon监控.分析系统性能   一.概述 nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具,相对于其它一些系统资源监控工具来说,nmon所记录的信息是比较全面的, ...