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点的最短路(点可重复走)
3
0 1 10 10
1 0 1 2
10 1 0 10
10 2 10 0
0
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的更多相关文章
- POJ 3311 Hie with the Pie (状压DP)
dp[i][j][k] i代表此层用的状态序号 j上一层用的状态序号 k是层数&1(滚动数组) 标准流程 先预处理出所有合法数据存在status里 然后独立处理第一层 然后根据前一层的max推 ...
- 【鸽】poj3311 Hie with the Pie[状压DP+Floyd]
题解网上一搜一大坨的,不用复述了吧. 只是觉得网上dp方程没多大问题,但是状态的表示含义模糊.不同于正常哈密顿路径求解,状态表示应当改一下. 首先定义一次移动为从一个点经过若干个点到达另一个点,则$f ...
- MPI Maelstrom(East Central North America 1996)(poj1502)
MPI Maelstrom 总时间限制: 1000ms 内存限制: 65536kB 描述 BIT has recently taken delivery of their new supercom ...
- poj 2732 Countdown(East Central North America 2005)
题意:建一个家庭树,找出有第d代子孙的名字,按照要求的第d代子孙的数从大到小输出三个人名,如果有一样大小子孙数的,就按字母序从小到大将同等大小的都输出,如果小于三个人的就全输出. 题目链接:http: ...
- East Central North America Region 2015
E 每过一秒,当前点会把它的值传递给所有相邻点,问t时刻该图的值 #include <iostream> #include <cstdio> #include <algo ...
- Gym-101673 :East Central North America Regional Contest (ECNA 2017)(寒假自训第8场)
A .Abstract Art 题意:求多个多边形的面积并. 思路:模板题. #include<bits/stdc++.h> using namespace std; typedef lo ...
- 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. ...
- 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 ...
- 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 ...
随机推荐
- wordpress翻译插件gtranslate
https://www.gdstautoparts.com/
- Web API 接口参考
Web API 接口参考:https://developer.mozilla.org/zh-CN/docs/Web/API
- NX二次开发-UFUN设置工程图PNG图片高度UF_DRF_set_image_height
#include <uf.h> #include <uf_drf.h> UF_initialize(); //插入PNG char* file_name = "D:\ ...
- go 简介与包
简介 Go语言是一种新的语言,一种并发的.带垃圾回收的.快速编译的语言.它具有以下特点: 1.它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序. 2.Go语言为软件构造提供了一种模型,它使依赖 ...
- final修饰和StringBuffer的几个案例(拼接,反转,对称操作)
final关键字修饰时如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改:如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象,但引用变量不能变,引用变量所指向的对象中的内容还 ...
- 人脸识别--Open set和Close set的区别
训练和测试人脸识别分类器时,总会提到Open-set和Close-set.这俩词到底是什么概念呢?有什么区别呢? 所谓close-set,就是所有的测试集都在训练集中出现过.所以每次的预测直接得出测试 ...
- [JZOJ3691] 【CF414E】Mashmokh's Designed tree
题目 题目大意 给你一棵树,接下来对这棵树进行三种操作: 1.询问两点之间的距离. 2.让某个点变为它原来的第\(h\)个祖先的最后一个儿子. 3.求\(dfs\)序中最后一个深度为\(k\)的点. ...
- 解决 php Call to undefined function shm_attach()
学习php 多进程的时候,运行脚本报错 Call to undefined function shm_attach() ,搜了一下,看到stack overflow 里面提示需要配置这些扩展 exte ...
- JQuery Ajax 向后台传参方式
在jquery的ajax函数中,可以传入3种类型的数据 文本:"uname=alice&mobileIpt=110&birthday=1983-05-12" jso ...
- 长链接生成短链接Java源码(调用百度接口)
public static DefaultHttpClient httpclient; static { httpclient = new DefaultHttpClient(); //httpcli ...