【CodeVS2800】 送外卖 最短路+状压DP
首先求出各点之间的最短路,floyed即可,注意是0~n。
然后考虑状压,f[i][j]表示状态为i时访问j点时的最短路和,1表示访问,0表示未访问,然后第j个点所在的位置就是(1<<j)有0存在,例如状态1010,从右至左,点1.3被访问,所以我们要处理第1各点就是(1<<1)。
f[i][j]=min(f[i][j],f[i-(1<<j)][p]+dis[p][j]);
p表示枚举每个点,i-(1<<j)状态回到访问j之前,很详细了。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,ans;
int dp[(<<)][],dis[][];
int main()
{
scanf("%d",&n);
ans=0x7fffffff;
memset(dp,,sizeof(dp));
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
scanf("%d",&dis[i][j]);
for (int k=;k<=n;k++)
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
dp[][]=;
for (int i=;i<(<<(n+));i++)
for (int now=;now<=n;now++)
for (int last=;last<=n;last++)
if (i&(<<now))
dp[i][now]=min(dp[i][now],dp[i-(<<now)][last]+dis[last][now]);
for (int i=;i<=n;i++)
ans=min(ans,dp[(<<(n+))-][i]+dis[i][]);
printf("%d\n",ans);
return ;
}
有一个送外卖的,他手上有n份订单,他要把n份东西,分别送达n个不同的客户的手上。n个不同的客户分别在1~n个编号的城市中。送外卖的从0号城市出发,然后n个城市都要走一次(一个城市可以走多次),最后还要回到0点(他的单位),请问最短时间是多少。现在已知任意两个城市的直接通路的时间。
第一行一个正整数n (1<=n<=15)
接下来是一个(n+1)*(n+1)的矩阵,矩阵中的数均为不超过10000的正整数。矩阵的i行j列表示第i-1号城市和j-1号城市之间直接通路的时间。当然城市a到城市b的直接通路时间和城市b到城市a的直接通路时间不一定相同,也就是说道路都是单向的。
一个正整数表示最少花费的时间
3
0 1 10 10
1 0 1 2
10 1 0 10
10 2 10 0
8
1<=n<=15
【CodeVS2800】 送外卖 最短路+状压DP的更多相关文章
- 【loj6177】「美团 CodeM 初赛 Round B」送外卖2 Floyd+状压dp
		
题目描述 一张$n$个点$m$条边的有向图,通过每条边需要消耗时间,初始为$0$时刻,可以在某个点停留.有$q$个任务,每个任务要求在$l_i$或以后时刻到$s_i$接受任务,并在$r_i$或以前时刻 ...
 - HDU 4568 Hunter 最短路+状压DP
		
题意:给一个n*m的格子,格子中有一些数,如果是正整数则为到此格子的花费,如果为-1表示此格子不可到,现在给k个宝藏的地点(k<=13),求一个人从边界外一点进入整个棋盘,然后拿走所有能拿走的宝 ...
 - 最短路+状压DP【洛谷P3489】 [POI2009]WIE-Hexer
		
P3489 [POI2009]WIE-Hexer 大陆上有n个村庄,m条双向道路,p种怪物,k个铁匠,每个铁匠会居住在一个村庄里,你到了那个村庄后可以让他给你打造剑,每个铁匠打造的剑都可以对付一些特定 ...
 - 【BZOJ1097】[POI2007]旅游景点atr 最短路+状压DP
		
[BZOJ1097][POI2007]旅游景点atr Description FGD想从成都去上海旅游.在旅途中他希望经过一些城市并在那里欣赏风景,品尝风味小吃或者做其他的有趣的事情.经过这些城市的顺 ...
 - HDU3247 Resource Archiver —— AC自动机 + BFS最短路 + 状压DP
		
题目链接:https://vjudge.net/problem/HDU-3247 Resource Archiver Time Limit: 20000/10000 MS (Java/Others) ...
 - hdu3247Resource Archiver (AC自动机+最短路+状压dp)
		
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 100000/100000 K (Java/Others) Total Submis ...
 - loj6177 「美团 CodeM 初赛 Round B」送外卖2  最短路+状压dp
		
题目传送门 https://loj.ac/problem/6177 题解 一直不知道允不允许这样的情况:取了第一的任务的货物后前往配送的时候,顺路取了第二个货物. 然后发现如果不可以这样的话,那么原题 ...
 - BZOJ 1097: [POI2007]旅游景点atr( 最短路 + 状压dp )
		
先最短路预处理, 然后状压就行了 -------------------------------------------------------------------------- #include ...
 - POJ 3311 Hie with the Pie  最短路+状压DP
		
Hie with the Pie Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11243 Accepted: 5963 ...
 
随机推荐
- 大熊君{{bb}}------春节期间你跳槽了吗?
			
时间过的很快,转眼间又快过春节了,推荐你在春节期间跳槽,是基于以下几个原因: 1,命中率高 通常情况下,所有公司都会在年底进行一定幅度的裁员,而惟独这家公司在招工,这等于明摆着告诉公众他们现在面临严重 ...
 - tyvj1097 mm不哭
			
背景 Bless all rp++.. 描述 在一个数轴上,有n个MM(绝非恐龙!)在哭泣(5555~一直哭). tcboy也在这个数轴上,并恰好看到了这一幕,由于每个MM哭都会让tcboy损失一定的 ...
 - nginx:413 Request Entity Too Large  及 修改 PHP上传文件大小配置
			
开发环境:CentOS + Nginx + PHP + MySql + phpMyAdmin 在用 phpMyAdmin 进行 sql 数据库导入的时候,经常需要上传比较大的 sql 数据文件,而这时 ...
 - PHP获取指定月份的第一天开始和最后一天结束的时间戳函数
			
<?php /** * 获取指定月份的第一天开始和最后一天结束的时间戳 * * @param int $y 年份 $m 月份 * @return array(本月开始时间,本月结束时间) */ ...
 - 【荐】MongoDB基本命令大全
			
DB Shell数据操作 shell命令操作语法和JavaScript很类似,其实控制台底层的查询语句都是用JavaScript脚本完成操作的. #数据库 操作 1.Help查看命令提示 > h ...
 - c#微信开发 转
			
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System. ...
 - 孙鑫C++教程留下来的作业--如何让工具栏在原来隐藏的位置出现
			
--加油,不仅仅是口号! BEGIN---------------------------------- 将工具栏进行停靠.当隐藏后再次点击出现的时候它出现在工具栏顶部了,并没有停靠在原来的位置,如何 ...
 - React学习笔记-1-什么是react,react环境搭建以及第一个react实例
			
什么是react?react的官方网站:https://facebook.github.io/react/下图这个就是就是react的标志,非常巧合的是他和我们的github的编辑器Atom非常相似. ...
 - javascript 核心语言笔记- 2 语法结构
			
字符集 JavasSript 程序是用 Unicode 字符集 编写的,Unicode 是 ASCII 和 Latin-1 的超集,支持几乎所有在用的语言.ECMAScript 3 要求 JavaSc ...
 - 【笔记】cookies管理工具类
			
package com.ulearning.ulms.util; import java.io.UnsupportedEncodingException; import java.net.URLDec ...