hdu5418--Victor and World(floyd+状压dp)
题目链接:点击打开链接
题目大意:有n个城市。在n个城市之间有m条双向路。每条路有一个距离。如今问从1号城市去游览其他的2到n号城市最后回到1号城市的最短路径(保证1能够直接或间接到达2到n)。(n<=16)
首先用floyd跑出随意一点到其它点最短路。
从n小于等于16就能够看出用状压,从1点開始,dp[i][j]当前经过了i中为1的城市。最后经过的城市是j,不断维护。最后得到dp[1<<n-1][j]+dis[j][1]的距离最短的值。
#include <iostream>
#include <string.h>
#include <math.h>
#include <queue>
#include <algorithm>
#include <stdlib.h>
#include <map>
#include <set>
#include <stdio.h>
#include <time.h>
using namespace std;
#define LL __int64
#define pi acos(-1.0)
#pragma comment(linker, "/STACK:1024000000")
const int mod=1e9+7;
const int INF=0x3f3f3f3f;
const double eqs=1e-9 ;
int Map[20][20] ;
int dp[200000][20] , dis[20] ;
int main() {
int t , n , m ;
int i , j , w , k , min1 ;
scanf("%d", &t) ;
while( t-- ) {
scanf("%d %d", &n, &m) ;
memset(Map,INF,sizeof(Map)) ;
while( m-- ) {
scanf("%d %d %d", &i, &j, &w) ;
i-- ; j-- ;
if( Map[i][j] > w )
Map[i][j] = Map[j][i] = w ;
}
for(i = 0 ; i < n ; i++) Map[i][i] = 0 ;
for(k = 0 ; k < n ; k++) {
for(i = 0 ; i < n ; i++) {
for(j = 0 ; j < n ; j++) {
Map[i][j] = min(Map[i][j],Map[i][k]+Map[k][j]) ;
}
}
}
memset(dp,INF,sizeof(dp)) ;
memset(dis,INF,sizeof(dis)) ;
dp[1][0] = 0 ;
dis[0] = 0 ;
m = 1<<n ;
for(i = 1 ; i < m ; i++) {
for(j = 0 ; j < n ; j++) {
if( dp[i][j] == INF ) continue ;
for(k = 0 ; k < n ; k++) {
if( (i&(1<<k)) || Map[j][k] == INF ) continue ;
if( dp[ i|(1<<k) ][k] > dp[i][j]+Map[j][k] ) {
dp[ i|(1<<k) ][k] = dp[i][j]+Map[j][k] ;
dis[k] = min(dis[k],dp[ i|(1<<k) ][k]) ;
}
}
}
}
min1 = INF ;
for(i = 0 ; i < n ; i++) {
min1 = min(min1,dp[m-1][i]+dis[i]) ;
}
printf("%d\n", min1) ;
}
return 0 ;
}
hdu5418--Victor and World(floyd+状压dp)的更多相关文章
- [hdu5418 Victor and World]floyd + 状压DP 或 SPFA
题意:给n个点,m条边,每次只能沿边走,花费为边权值,求从1出发经过所有其它点≥1次最后回到1的最小花费. 思路: 状压DP.先用Floyd得到任意两点间的最短距离,转移时沿两个点的最短路转移.此时的 ...
- HDU5418.Victor and World(状压DP)
#include <iostream> #include <cstring> #include <cstdio> #include <cmath> #i ...
- 【loj6177】「美团 CodeM 初赛 Round B」送外卖2 Floyd+状压dp
题目描述 一张$n$个点$m$条边的有向图,通过每条边需要消耗时间,初始为$0$时刻,可以在某个点停留.有$q$个任务,每个任务要求在$l_i$或以后时刻到$s_i$接受任务,并在$r_i$或以前时刻 ...
- Hie with the Pie(POJ3311+floyd+状压dp+TSP问题dp解法)
题目链接:http://poj.org/problem?id=3311 题目: 题意:n个城市,每两个城市间都存在距离,问你恰好经过所有城市一遍,最后回到起点(0)的最短距离. 思路:我们首先用flo ...
- poj 3311 Hie with the Pie 经过所有点(可重)的最短路径 floyd + 状压dp
题目链接 题意 给定一个\(N\)个点的完全图(有向图),求从原点出发,经过所有点再回到原点的最短路径长度(可重复经过中途点). 思路 因为可多次经过同一个点,所以可用floyd先预处理出每两个点之间 ...
- codevs2800送外卖(floyd+状压dp)
2800 送外卖 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份东 ...
- HDU - 4284 Travel(floyd+状压dp)
Travel PP loves travel. Her dream is to travel around country A which consists of N cities and M roa ...
- ACM学习历程—HDU5418 Victor and World(动态规划 && 状压)
这个题目由于只有16个城市,很容易想到去用状压来保存状态. p[i][state]表示到i城市经过state状态的城市的最优值(state的二进制位每一位为1表示经过了该城市,否则没经过) 这样p[j ...
- POJ 3311 Hie with the Pie floyd+状压DP
链接:http://poj.org/problem?id=3311 题意:有N个地点和一个出发点(N<=10),给出全部地点两两之间的距离,问从出发点出发,走遍全部地点再回到出发点的最短距离是多 ...
随机推荐
- Adobe Audio 分轨录音教程(需要KX,Live机架)
一.需要的硬件和软件 1. 创新5.1声卡或7.1声卡: 2. 已安装KX驱动和Live机架,经过测试安装后需要重启电脑才能生效. 3. 已安装Adobe Audition 3.0 二.测试环境 WI ...
- 实现基于LVS负载均衡集群的电商网站架构
背景 上一期我们搭建了小米网站,随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法 ...
- c# word文档与二进制数据的相互转换
最近项目出使用到了将word文档以二进制的方法存到数据库中,并再次读取出二进制数据转换为word文档.最后总结了一下,不多说看示例方法: 代码 , content.Length); ...
- Android drawText 做到文字绝对居中
我们在android中经常会遇到自定义一些组件,因为现有的android组件是往往不能满足当下的需求的,今天就给大家介绍一下在自定义组建过程中用到的drawText不居中的问题的解决方案 首先大家看一 ...
- spring boot系列02--Thymeleaf+Bootstrap构建页面
上一篇说了一下怎么构建spring boot 项目 接下来我们开始讲实际应用中需要用到的 先从页面说起 页面侧打算用Thymeleaf+Bootstrap来做 先共通模板页 <!DOCTYPE ...
- Java中常用加减密方式
1.加密概述: 加密就是是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使以获得了加密的信息,但因不知解密方式,仍无法了解信息的内容.大体上又分为双向加密和单向加密. 2.单项加密 2.1.概 ...
- LINQ学习系列-----2.2 迭代器
在学习本篇迭代器之前,强烈建议可以先学习一位具有工匠精神博主的文章,链接如下: 农码一生---先说IEnumerable,我们每天用的foreach你真的懂它吗? 本篇文章,是在该博主博文的基础上再次 ...
- React服务器端渲染值Next.js
昨天leader给分配了新任务,让熟悉一下ssr,刚开始有点懵,啥玩意?百度了一下,不就是服务器端渲染(server side render,简称: ssr). ssr简介 服务端渲染一个很常见的场景 ...
- nomad的简易集群
启动服务器 第一步是为服务器创建配置文件.无论是从下载的文件github,或粘贴到一个名为server.hcl: vim server.hcl # Increase log verbosity log ...
- “核弹级”Android漏洞Janus,黑客可以任意篡改App
美国时间12月9日,Google披露了一个名为"Janus"安卓漏洞.该漏洞可以让攻击者绕过安卓签名机制,从而让攻击者对App进行篡改,安卓5.0到8.0等个版本系统均受影响. 顶 ...