1698: 送外卖

时间限制: 1 Sec  内存限制: 128 MB
提交: 123  解决: 28
[提交][状态][讨论版]

题目描述

在美团和饿了么大行其道的今天,囊中羞涩的小周和小美,也随大流加入了配送员的行列。每天下课后,他们都去堕落街帮北京烤鸭店送外卖。

过了好些日子,小周发现每次送外卖,小美总比自己先回来,就算自己拼命跑啊跑,也总是比她慢,明明小美也是和自己一样,走着去送外卖的(等外卖的都饿死了╮(╯﹏╰)╭)。

小周忍不住问了小美这是怎么回事,小美说:“笨蛋,本小姐每次出去都选最短的路,肯定比你走远的路快啊!”

小周恍然大悟,深恨自己怎么没有早早想到这一点,不过亡羊补牢,为时未晚,立即决定效仿小美的做法。小周将店的位置标号为0,其他要送外卖的位置标号分别是1,2,3……然后又将各个标号之间的距离做了一张二维表A,其中A[0][i]代表从店家出发到第i个外卖点的距离,A[i][j](i!=0&&j!=0)表示第i个外卖点到第j个外卖点的距离。

小周每次都从店里出发,送完所有外卖之后,就从最后一个送完外卖的地点径直地回到店里,因为直接回去总是最近的,小周统计出来的表的确也是这样的。保证矩阵对称且主对角线上的元素都是0。

不过由于小周实在是太忙了,连计算最短路线的时间都没有,现在给你这张小周做好的表,请你帮小周确定一下最短的路线吧!

输入

第一行输入数据的组数T(1<=T<=50)。

对于每一组数据,第一行一个n(0 < n <= 9),代表要送的外卖数量,然后一个(n+1)*(n+1)的矩阵A,代表小周的统计出来距离表,0 <= A[i][j] <= 500。

输出

对于每组数据,输出送完所有外卖并回到店里的最短的距离

样例输入

2
1
0 52
52 0
2
0 319 430
319 0 96
430 96 0

样例输出

104
845
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <string>
#include <map>
#include <cmath>
#include <set> using namespace std;
int n,Map[][],maxi;
int status[][ << ];
int DFS(int v,int S)
{
if(S==(maxi-)) return Map[v][];
if(status[v][S]) return status[v][S];
int M=;
for(int i=; i<=n; i++)
if(!(S&(<<(i-)))&&v!=i)
{
S|=(<<(i-));
M=min(M,DFS(i,S)+Map[v][i]);
S&=(~(<<(i-)));
}
return status[v][S]=M;
}
int main()
{
//freopen("salesman.in","r",stdin);
//freopen("salesman.out","w",stdout);
int T;
scanf("%d", &T);
while(T--){
memset(status, , sizeof(status)); scanf("%d",&n); n++;
maxi=(int)pow(2.0,n*1.0);
for(int i=; i<=n; i++)
for(int j=; j<=n; j++)
scanf("%d",&Map[i][j]);
cout<<DFS(,)<<endl;
}
return ;
}

最新文章

  1. 使用kindeditor文本编辑器
  2. android-BaseAdapter自定义控件深刻理解
  3. Web性能优化之动态合并JS/CSS文件并缓存客户端
  4. Js全选,插入实现
  5. Axure折叠与展开效果的实现
  6. TCP的基本概念三次握手,四次挥手
  7. 通过 docker 搭建自用的 gitlab 服务
  8. PHP实现部分字符隐藏
  9. 做移动端电子签名发现canvas的 一些坑
  10. Lua中的协同程序
  11. Variables and Arithmetic Expression
  12. 使用 CGContextRef 进行简单内容绘制
  13. Linux内核(1) - Kernel地图:Kconfig与Makefile
  14. Win10 64位+VS2015+Opencv3.3.0安装配置
  15. 【转】简明 Python 教程
  16. Elasticsearch全文检索工具入门
  17. PsySH——PHP交互式控制台
  18. ubuntu常见错误
  19. Objective-C Runtime(一)预备知识
  20. Oracle ORA-01033: ORACLE initialization or shutdown in progress 错误解决办法Windows版(手贱强制重启电脑的后果)

热门文章

  1. vue使用 router-link 时点击不能跳转问题
  2. JUnit——assertThat(acture,matcher)
  3. HY中考游记
  4. noi 求分数序列和 x
  5. Anaconda是如何进行版本管理的?
  6. springboot(二).springboot整合logback用于日志输出
  7. BZOJ 2731 Luogu P3219 [HNOI2012]三角形覆盖问题 (扫描线)
  8. sqli-labs(36)
  9. 20182335实验一《Linux基础与Java开发环境》
  10. PHP操作json