poj3311 Hie with the Pie

原创 2015年07月10日 20:12:43

题目链接:Hie with the Pie

TSP水题。。题意很简单,一个人送pizza,给出这个人在这些城市间送pizza的时间,从0出发,遍历城市1~n,并回到0,求最短时间是多少。

思路:因为一个城市可以多次跑,所以先floyd,dp[i][j]中i表示状态,j表示城市,初始化就是i==1<<(j-1)的时候了,dp[i][j]由所有满足k != j && (1<<(k-1) & i)的k转移过来,最后取加上从i到0的距离最小值就行了。

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<map>
#include<set>
#include<sstream>
#include<vector>
#include<string>
#include<queue>
#include<algorithm>
#define mod 100000000
#define INF 1000000000
#define maxn (1<<10)
#define CEN 45000
#define ll __int64
using namespace std;
int n,mp[15][15],dp[maxn][15],maxm;

int main()
{
    int i,j,k,ans;
    while(scanf("%d",&n) && n)
    {
        maxm = 1<<n;
        ans=INF;
        n++;
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
                scanf("%d",&mp[i][j]);
        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]);
        for(i=0;i<maxm;i++)
            for(j=0;j<12;j++)
                dp[i][j] = INF;
        for(i=0;i<maxm;i++)
            for(j=1;j<n;j++)
            {
                if((1<<(j-1) == i)) dp[i][j] = mp[0][j];
                else if((1<<(j-1) & i))
                {
                    for(k=1;k<n;k++)
                        if(k != j && (1<<(k-1) & i))
                            dp[i][j] = min ( dp[i][j] , dp[(i^(1<<(j-1)))][k] + mp[k][j] );
                }
            }
        for(i=1;i<n;i++)
            ans = min( ans , dp[maxm-1][i] + mp[i][0] );
        printf("%d\n",ans);
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

POJ3311:Hie with the Pie(floyd+状态压缩DP)

Description The Pizazz Pizzeria prides itself in delivering pizzas to its customers as fast as po...
  • libin56842
  • libin56842
  • 2014年04月26日 14:56
  • 2881

poj3311 Hie with the Pie

Description The Pizazz Pizzeria prides itself in delivering pizzas to its customers as fast as poss...
  • Kirito_Acmer
  • Kirito_Acmer
  • 2015年06月22日 12:00
  • 541

poj3311 Hie with the Pie,状态压缩

题目链接:http://poj.org/problem?id=3311 Floyd + 状态压缩DP 题意是有N个城市(1~N)和一个PIZZA店(0),要求一条回路,从0出发,又回到0,而且...
  • yew1eb
  • yew1eb
  • 2014年09月11日 15:13
  • 1573

Hie with the Pie poj3311

Description The Pizazz Pizzeria prides itself in delivering pizzas to its customers as fast as poss...
  • xtulollipop
  • xtulollipop
  • 2015年08月03日 14:23
  • 260

POJ3311 Hie with the Pie

题意:一个服务员从0点开始送餐,要求送到所有点回来
  • eeeaaaaa
  • eeeaaaaa
  • 2014年11月10日 12:20
  • 229

POJ3311——Hie with the Pie

Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4646 ...
  • Guard_Mine
  • Guard_Mine
  • 2014年11月04日 10:33
  • 936

poj3311 Hie with the Pie(状态压缩dp)

poj3311分析首先用弗洛伊德算法求一下两点之间的最短路,然后枚举每一个状态,枚举两个经过的但是不同的点,进行初始化,或者是状态转移。dp[s][i]表示状态为s,到了i点。题目http://poj...
  • pibaixinghei
  • pibaixinghei
  • 2016年02月07日 22:34
  • 180

POJ3311 Hie with the Pie 状压DP

今天好不容易切了两道这样的题目,第一道就不提了,完全是题目有特殊情况没判,基本上是入门型的了,这道还不错的,而且有个博客写的特别的好, http://www.tuicool.com/articles/...
  • u010682557
  • u010682557
  • 2014年08月15日 23:19
  • 715

poj3311(Hie with the Pie)状压dp

题目链接:http://poj.org/problem?id=3311 解法:标准的状压dp类型,先floyd获得两两之间最短距离。然后dp[i][j]表示剩下集合i没走,已经走到j的最短距离; ...
  • xiefubao
  • xiefubao
  • 2014年06月26日 23:03
  • 600

POJ3311 Hie with the Pie(状态压缩dp)

题目要求,从0出发,必须经过N个点,然后回到0点。 每两个点之间花费的时间不同,i到j和j到i也不同,求最短时间。 1先用floyd算法求出两点之间最短路径 2递归方程 dp[j][i]=min(dp...
  • u011032846
  • u011032846
  • 2013年07月05日 18:14
  • 916
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj3311 Hie with the Pie
举报原因:
原因补充:

(最多只允许输入30个字)