HDU 5418 Victor and World (Floyd + 状态压缩DP)
题目大意:从起点 1 开始走遍所有的点,回到起点 1 ,求出所走的最短长度。
思路:首先利用 Floyed 求出任意两点之间的最短距离 dis[i][j]。求出任意两点之间的最短距离后,运用动态规划。dp[s][i] 表示当前状态为s时,最后一个到达的点为 1 时走过的最短距离。
将状态状态 s 看成一个二进制数,每一个二进制位表示一个点是否被访问,若第 i 位为1时表示第 i 个点被访问过了,为 0 则表示未访问。
dp[ s | ( 1 << i )][ i ] = min( dp[s][j] + dis[i][j] ); 先枚举 s 在枚举 i ,其中 s & i = 0 ,s & j !=0 。最初只有dp[1][0] = 0, 其它均为INF, 最后结果为 min(dp[ (1 << n) - 1][j] + dis[j][0]) 。
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
#define INF 0x7fffffff
int dp[1<<16][17];
void Floyd(int dis[][20],int n){
int i,j,k;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(k=0;k<n;k++)
if(dis[i][k] < INF && dis[k][j] < INF)
dis[i][j] = min(dis[i][k]+dis[k][j],dis[i][j]);
}
int main(){
int x,y,w,n,m,i,j,T,dis[20][20];
cin >> T ;
while(T--){
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
dis[i][j] = INF;
for(i=0;i<n;i++)
dis[i][i] = 0;
for(i=0;i<m;i++){
scanf("%d%d%d",&x,&y,&w) ;
x --;
y --;
dis[x][y] = dis[y][x] = min(dis[x][y],w);
}
Floyd(dis,n);
for(i=0;i< (1<<n); i++)
for(j=0;j<n;j++)
dp[i][j] = INF;
dp[1][0] = 0;
for(int s=1;s< (1 << n) ; s++){
for(i=0 ;i< n;i++)
if(!(s & (1<<i))) {
for(j=0;j<n;j++)
if((s & (1<<j)) && dp[s][j] < INF && dis[i][j] < INF ){
dp[s | (1<<i)][i] = min(dp[s | (1<<i)][i],dp[s][j] + dis[i][j]) ;
}
}
}
int ans = INF;
for(i=0;i<n;i++){
if(dp[(1<<n) -1][i] < INF && dis[i][0] < INF)
ans = min(ans,dp[(1<<n) - 1][i] + dis[i][0]);
}
printf("%d\n",ans);
}
return 0;
}
HDU 5418 Victor and World (Floyd + 状态压缩DP)的更多相关文章
- HDU 5418 Victor and World (状态压缩dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5418 题目大意:有n个结点m条边(有边权)组成的一张连通图(n <16, m<100000 ...
- HDU 5418——Victor and World——————【状态压缩+floyd】
Victor and World Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/131072 K (Java/Other ...
- POJ 3311 Hie with the Pie(Floyd+状态压缩DP)
题是看了这位的博客之后理解的,只不过我是又加了点简单的注释. 链接:http://blog.csdn.net/chinaczy/article/details/5890768 我还加了一些注释代码,对 ...
- hdu 4057 AC自己主动机+状态压缩dp
http://acm.hdu.edu.cn/showproblem.php?pid=4057 Problem Description Dr. X is a biologist, who likes r ...
- [poj3311]Hie with the Pie(Floyd+状态压缩DP)
题意:tsp问题,经过图中所有的点并回到原点的最短距离. 解题关键:floyd+状态压缩dp,注意floyd时k必须在最外层 转移方程:$dp[S][i] = \min (dp[S \wedge (1 ...
- ACM: HDU 5418 Victor and World - Floyd算法+dp状态压缩
HDU 5418 Victor and World Time Limit:2000MS Memory Limit:131072KB 64bit IO Format:%I64d & ...
- HDU 5418 Victor and World(状压DP+Floyed预处理)
Victor and World Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/131072 K (Java/Other ...
- HDU 2825 Wireless Password ( Trie图 && 状态压缩DP )
题意 : 输入n.m.k意思就是给你 m 个模式串,问你构建长度为 n 至少包含 k 个模式串的方案有多少种 分析 : ( 以下题解大多都是在和 POJ 2778 && POJ 162 ...
- hdu 5067 Harry And Dig Machine (状态压缩dp)
题目链接 bc上的一道题,刚开始想用这个方法做的,因为刚刚做了一个类似的题,但是想到这只是bc的第二题, 以为用bfs水一下就过去了,结果MLE了,因为bfs的队列里的状态太多了,耗内存太厉害. 题意 ...
- HDU 4649 Professor Tian(反状态压缩dp,概率)
本文出自 http://blog.csdn.net/shuangde800 题目链接:点击打开链接 题目大意 初始有一个数字A0, 然后给出A1,A2..An共n个数字,这n个数字每个数字分别有一 ...
随机推荐
- git术语解释staging,index,cache
当我在使用git的时候,有三个东西的出现,一度让我非常困扰,就如题所述,staging,index,和cache. 比如,当我阅读git官网提供的电子书<Pro Git>的时候,最初一章里 ...
- Install and configure sql server 2008 express
http://www.symantec.com/connect/articles/install-and-configure-sql-server-2008-express
- iphone UIScrollView缩放
allImageScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)]; allImageScrol ...
- WHY IE AGAIN? - string.charAt(x) or string[x]?
近期今天在写一个"删除字符串中反复字符串"的函数,代码例如以下: 开门见山,重点 string.charAt(index) 取代 string[index] function re ...
- [MVC4-基礎] 使用DataAnnotations+jQuery進行表單驗證
我目前有以下表單,Select部分因為必須上一層有選擇下層才有資料,因此使用jQuery驗證問題類型是否有選擇就好,而問題描述要驗證是否為空,這裡採用MVC內建的DataAnnotations來驗證. ...
- NFinal 控制器—URL
URL路由规则 规则:http://网址/模块名/控制器的相对路径的文件名/函数名.htm 例: http://localhost/App/IndexController/Index.htmhttp: ...
- 《第一行代码》学习笔记19-广播接收器Broadcast_Receiver(2)
1.解决广播的安全性问题,Android引入了一套本地广播机制,使用该机制发出的广播只能够在应用程序内部进行传递,并且广播接收器只能 接收来自本应用程序发出的广播. 2.本地广播无法通过静态注册来接收 ...
- 《第一行代码》学习笔记16-碎片Fragment(1)
1.碎片( Fragment):一种可以嵌入在活动当中的UI片段,能让程序更加合理和充分地利用大屏幕的空间,在平板上的应用广泛. 2.碎片同样包括布局,有自己的生命周期,甚至可理解成一个迷你型的活动. ...
- C#图像处理(4):图像的剪裁
图像的剪裁方法,从中间剪裁返回剪裁后的左右两页,方法实现如下: /// <summary> /// 图片裁剪,返回左右两页 /// </summary> /// <par ...
- 在html页头设置不缓存
方法一:在<head>标签里增加如下meta标签. <meta http-equiv="Content-Type" content="text/html ...