2800 送外卖

时间限制: 2 s

空间限制: 256000 KB

题目等级 : 钻石 Diamond

题目描述 Description

有一个送外卖的,他手上有n份订单,他要把n份东西,分别送达n个不同的客户的手上。n个不同的客户分别在1~n个编号的城市中。送外卖的从0号城市出发,然后n个城市都要走一次(一个城市可以走多次),最后还要回到0点(他的单位),请问最短时间是多少。现在已知任意两个城市的直接通路的时间。

输入描述 Input Description

第一行一个正整数n (1<=n<=15)

接下来是一个(n+1)*(n+1)的矩阵,矩阵中的数均为不超过10000的正整数。矩阵的i行j列表示第i-1号城市和j-1号城市之间直接通路的时间。当然城市a到城市b的直接通路时间和城市b到城市a的直接通路时间不一定相同,也就是说道路都是单向的。

输出描述 Output Description

一个正整数表示最少花费的时间

样例输入 Sample Input

3

0 1 10 10

1 0 1 2

10 1 0 10

10 2 10 0

样例输出 Sample Output

8

数据范围及提示 Data Size & Hint

1<=n<=15

分类标签 Tags

Floyd 动态规划 状态压缩型DP 图论

/*
状压DP入门题.
我刚入门。。。
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#define MAXN 21
#define MAXM 70001
using namespace std;
int n,dis[MAXN][MAXN],f[MAXM][MAXN],ans=1e9;
void floyed()
{
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)
for(int k=0;k<=n;k++)
if(i!=j&&j!=k&&i!=k)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
return ;
}
void dp()
{
memset(f,127/3,sizeof f);
for(int i=0;i<=n;i++) f[1<<i][i]=dis[0][i];
for(int s=1;s<=(1<<n+1)-1;s++)
{
for(int i=0;i<=n;i++)
if(s&(1<<i))
{
for(int j=0;j<=n;j++)
if(i!=j) f[s|(1<<j)][j]=min(f[s|(1<<j)][j],f[s][i]+dis[i][j]);
}
}
for(int i=1;i<=n;i++) ans=min(ans,f[(1<<n+1)-1][i]+dis[i][0]);
}
int main()
{
int x;
scanf("%d",&n);
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)
scanf("%d",&x),dis[i][j]=x;
floyed();dp();
printf("%d",ans);
return 0;
}

Codevs 2800 送外卖(状压DP)的更多相关文章

  1. Codeves 2800 送外卖 状态压缩DP+floyd

    送外卖     题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份东西,分别送达n个不同的客户的手上.n个不同的客户分别在1~n个编号的城市中.送外卖的从0号城市出发,然后 ...

  2. 2800 送外卖[状态压缩dp]

    2800 送外卖  时间限制: 2 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 有一个送外卖的,他手上有n份订单,他 ...

  3. codevs 2800 送外卖 TSP问题

    2800 送外卖 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond         题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份 ...

  4. codevs 2800 送外卖 floyd + Tsp

    简单的状压动归 #include<cstdio> #include<algorithm> using namespace std; const int N=17; const ...

  5. [codevs 2800]送外卖

    题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份东西,分别送达n个不同的客户的手上.n个不同的客户分别在1~n个编号的城市中.送外卖的从0号城市出发,然后n个城市都要走一 ...

  6. codevs 2800 送外卖(状压dp)

    /* f[i][j] 表示走过的点构成i状态 且最后到达的点为j时的最优解 在那最后一个状态就是(1<<n+1)-1 每个点都到达 在由此回到0 */ #include<iostre ...

  7. POJ 3311 Hie with the Pie 兼 Codevs 2800 送外卖(动态规划->TSP问题)

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

  8. codevs2800送外卖(floyd+状压dp)

    2800 送外卖  时间限制: 2 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond     题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份东 ...

  9. loj #6177. 「美团 CodeM 初赛 Round B」送外卖2 状压dp floyd

    LINK:#6177.美团 送外卖2 一道比较传统的状压dp题目. 完成任务 需要知道自己在哪 已经完成的任务集合 自己已经接到的任务集合. 考虑这个dp记录什么 由于存在时间的限制 考虑记录最短时间 ...

随机推荐

  1. Linux 6 本地网络配置方法

    在Linux 6 系统安装完成后,需要对网络进行一系列的配置,有些朋友喜欢使用桌面图形化工具的配置方式,这种配置方法虽说比较方便,但是在某些时候并不问题,总是会出现各种问题.特别是作为服务器用途的时候 ...

  2. 倾斜动画(SkewTransform)

    Silverlight中的倾斜变化动画(SkewTransform)能够实现对象元素的水平.垂直方向的倾斜变化动画效果.我们现实生活中的倾斜变化效果是非常常见的,比如翻书的纸张效果,关门开门的时候门缝 ...

  3. C#泛型集合之——队列与堆栈

    队列与堆栈基础 队列 1.操作: (1)创建及初始化: Queue<类型> 队列名 =new Queue<类型>()://空队列,无元素 Queue<类型> 队列名 ...

  4. Docker 四种网络模式

    原文 https://www.cnblogs.com/gispathfinder/p/5871043.html 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络 ...

  5. python程序打包exe文件

    第一步:安装依赖 pip install pyinstaller 第二步:移动文件 把python文件和一个exe拿来当图标的ico文件移动到同一文件中 注意:文件路径不用用中文!!!!!!!! 第三 ...

  6. ajax的五大步骤

    什么是Ajax? AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下. var btn = document.getElementsByTagName('button')[ ...

  7. AppDir【创建缓存目录】【建议使用这个工具类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 创建缓存目录 public static String APP_CACHE = "";// /storage/e ...

  8. mysql DML select查询

    windows上的操作 1.从官网下载mysql 下载navicat,用来连接mysql的 2.打开运行启动mysql 3.在navicat上的连接打开新建连接 然后输入链接名,连接名就是用户名,自己 ...

  9. ES读写索引内幕分析

    一.简介 ES中的索引都进行分片,每个分片都会保存多个副本.这些副本称为复制组,在添加或删除索引时必须同步副本.如果不这样,从不同的副本中读取的索引可能截然不同.保持分片副本同步并从中提供读取的过程被 ...

  10. 【故障解决】OGG-00446 错误解决

    [故障解决]OGG-00446 Could not find archived log for sequence 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读和 ...