Hie with the Pie
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 4671   Accepted: 2471

Description

The Pizazz Pizzeria prides itself in delivering pizzas to its customers as fast as possible. Unfortunately, due to cutbacks, they can afford to hire only one driver to do the deliveries. He will wait for 1 or more (up to 10) orders to be processed before
he starts any deliveries. Needless to say, he would like to take the shortest route in delivering these goodies and returning to the pizzeria, even if it means passing the same location(s) or the pizzeria more than once on the way. He has commissioned you
to write a program to help him.

Input

Input will consist of multiple test cases. The first line will contain a single integer n indicating the number of orders to deliver, where 1 ≤ n ≤ 10. After this will be n + 1 lines each containing n + 1 integers indicating
the times to travel between the pizzeria (numbered 0) and the n locations (numbers 1 to n). The jth value on the ith line indicates the time to go directly from location i to location j without visiting
any other locations along the way. Note that there may be quicker ways to go from i to j via other locations, due to different speed limits, traffic lights, etc. Also, the time values may not be symmetric, i.e., the time to go directly from
location i to j may not be the same as the time to go directly from location j to i. An input value of n = 0 will terminate input.

Output

For each test case, you should output a single number indicating the minimum time to deliver all of the pizzas and return to the pizzeria.

Sample Input

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

Sample Output

8

题意

从0出发送汉堡,送完每一个点后回到0点

矩阵 表示各个点间距离。

思路

由于能够各个点多次经过。所以先求下floyd 来更新点点之间最短距离。

把每一步。到各个点的状态和最后一步所在的位置还有所花的距离保存下来。

把最后到的各个地方,再加个回零点的距离。求个最小值。

dp[15][15]   一维表示已经走的步数,二维表示当前最后一步到的点。  map的x表示状态,y表示已经花费的时间。

#include<stdio.h>
#include<map>
#include<algorithm>
using namespace std;
map<int,int>::iterator it;
map<int,int> dp[15][15];//ceng 结尾
int mp[15][15];
void floyd(int n)
{
int i,j,k;
for(k=0;k<=n;k++)
{
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]);
}
}
}
}
int main()
{
int n,i,j,k,mn,x,y;
while(scanf("%d",&n),n)
{
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
scanf("%d",&mp[i][j]);
}
}
floyd(n);
/*for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
printf("%d ",mp[i][j]);
}
puts("");
}*/ //clear
dp[0][0][1]=0;
for(i=1;i<=n;i++)//第几处了
{
for(k=0;k<=n;k++)//终点
{
dp[i][k].clear();
for(j=0;j<=n;j++)//起点
{
for(it=dp[i-1][j].begin();it!=dp[i-1][j].end();it++)//上一层的各个状态
{
x=it->first;
y=it->second;
if((x&(1<<k))==0)//还没走过
{
if(dp[i][k].count(x|(1<<k))==0)
dp[i][k][x|(1<<k)]=y+mp[j][k];
else
dp[i][k][x|(1<<k)]=min(dp[i][k][x|(1<<k)],y+mp[j][k]);
}
}
}
}
} i=n;//最后一层
mn=999999999;
for(j=1;j<=n;j++)
{
for(it=dp[i][j].begin();it!=dp[i][j].end();it++)//上一层的各个状态
{
mn=min(mn,it->second+mp[j][0]);
}
}
printf("%d\n",mn); }
return 0;
}
/*
3
0 1 10 10
1 0 1 2
10 1 0 10
10 2 10 0 3
0 5 6 7
5 0 8 9
6 8 0 10
7 9 10 0
*/

poj 3311 Hie with the Pie dp+状压的更多相关文章

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

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

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

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

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

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

  4. POJ 3311 Hie with the Pie 【状压DP】

    Description The Pizazz Pizzeria prides itself in delivering pizzas to its customers as fast as possi ...

  5. poj 3311 Hie with the Pie (状压dp) (Tsp问题)

    这道题就是Tsp问题,稍微加了些改变 注意以下问题 (1)每个点可以经过多次,这里就可以用弗洛伊德初始化最短距离 (2)在循环中集合可以用S表示更清晰一些 (3)第一维为状态,第二维为在哪个点,不要写 ...

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

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

  7. poj 3311 Hie with the Pie

    floyd,旅游问题每个点都要到,可重复,最后回来,dp http://poj.org/problem?id=3311 Hie with the Pie Time Limit: 2000MS   Me ...

  8. POJ 3311 Hie with the Pie 最短路+状压DP

    Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11243   Accepted: 5963 ...

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

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

随机推荐

  1. CF614A【签到题】

    题目链接[http://codeforces.com/problemset/problem/614/A] 题意:输入三个数l.r.k(1 ≤ l ≤ r ≤ 1018, 2 ≤ k ≤ 109),输出 ...

  2. 【多重背包小小的优化(。・∀・)ノ゙】BZOJ1531-[POI2005]Bank notes

    [题目大意] Byteotian Bit Bank (BBB) 拥有一套先进的货币系统,这个系统一共有n种面值的硬币,面值分别为b1, b2,..., bn. 但是每种硬币有数量限制,现在我们想要凑出 ...

  3. bzoj 1833

    f[pos][top] 统计数字个数 g[pos][top][digit] 统计数位(对于f[pos][top]中的所有数) /************************************ ...

  4. python开发_tkinter

    Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用, 同样可以应用在Windows和Macint ...

  5. C# 7.0中可能出现的语法

    今天在MSDN上看到的微软关于微软关于C# 7.0特性的Work List,主要特性如下: Tuple增强 Tuple的可读性一直不是很好, 很多时候宁愿新写一个类也不使用Item1, Item2这种 ...

  6. Dual-voltage regulator meets USB-power needs

    This Design Idea stems from the limited availability of IC voltage regulators that can meet key USB- ...

  7. 220V和380V电器设备电流计算方法

    220V和380V电器设备电流计算方法 1)单相电机电流=功率/(电压*功率因数*效率): 2)三相电机电流=功率/(1.732*电压*功率因数*效率): 3)空载电流为额定电流的30-50%左右: ...

  8. libgdx与Robovm绑定的坑

    https://github.com/BlueRiverInteractive/robovm-ios-bindings

  9. KindEditor编辑器常用操作

    创建编辑器: ar editor=KindEditor.create('#nr'); 设置编辑器内容: editor.html('编辑器内容'); 移除编辑器: editor.remove();

  10. python接口自动化9-https请求(SSL)

    前言 本来最新的requests库V2.13.0是支持https请求的,但是一般写脚本时候,我们会用抓包工具fiddler,这时候会报:requests.exceptions.SSLError: [S ...