HDU 3001 Travelling(状态压缩DP+三进制)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3001
题目大意:有n个城市,m条路,每条路都有一定的花费,可以从任意城市出发,每个城市不能经过两次以上,要求经过所有城市并且花费最少,求出最小花费。
解题思路:三进制的状态压缩DP,跟二进制还是有一点不一样的,因为三进制没有直接的位运算,还要自己先做处理利用num[i][j]记录数字i各位的三进制表示方便计算,其他的就跟二进制状态压缩没有太大区别了。还有注意:
①开始要将n个起点初始化,dp[bit[i]][i]=0
②有重边,要去重
代码:
- #include<iostream>
- #include<algorithm>
- #include<cstdio>
- #include<queue>
- #include<cstring>
- using namespace std;
- const int INF=0x3f3f3f3f;
- const int N=6e4+;
- int n,m,ans;
- int map[][];
- int dp[N][];
- int bit[]={,,,,,,,,,,};
- int num[N][];
- //计算所有数字10位以内三进制表示
- void make_tab(){
- for(int i=;i<bit[];i++){
- int b=i;
- for(int j=;j<;j++){
- num[i][j]=b%;
- b/=;
- }
- }
- }
- int main(){
- make_tab();
- while(~scanf("%d%d",&n,&m)){
- memset(map,0x3f,sizeof(map));
- memset(dp,0x3f,sizeof(dp));
- int ans=INF;
- for(int i=;i<=m;i++){
- int a,b,c;
- scanf("%d%d%d",&a,&b,&c);
- a--,b--;
- //去重边
- map[a][b]=min(map[a][b],c);
- map[b][a]=min(map[b][a],c);
- }
- for(int i=;i<n;i++)
- dp[bit[i]][i]=;//对每个点定位初始点0
- for(int i=;i<bit[n];i++){
- bool flag=true;//表示所有位都是>=1,也就是每个城镇都走过了
- for(int j=;j<n;j++){
- if(num[i][j]==)
- flag=false;
- if(dp[i][j]==INF)//判断是否走到j点
- continue;
- for(int k=;k<n;k++){
- //注意这个num[i][k]>=2,因为如果i状态在k点已经走过两次了显然是不能继续往下走的
- if(j==k||num[i][k]>=||map[j][k]==INF)
- continue;
- int next=i+bit[k];//从j点走到k点
- dp[next][k]=min(dp[next][k],dp[i][j]+map[j][k]);
- }
- }
- //如果所有城镇都走了一遍则可以找出最小值
- if(flag){
- for(int j=;j<n;j++)
- ans=min(ans,dp[i][j]);
- }
- }
- if(ans==INF)
- puts("-1");
- else
- printf("%d\n",ans);
- }
- return ;
- }
HDU 3001 Travelling(状态压缩DP+三进制)的更多相关文章
- HDU - 3001 Travelling 状压dp + 三进制 [kuangbin带你飞]专题二
终于刷完搜索专题了. 题意:给定n个城市,每个城市参观不能超过两次,两个城市之间有道路通过需要花费X,求通过能所有城市的最小花费. 思路:每个城市有三个状态0,1,2,可用三进制存储所有城市的访问状态 ...
- HDU 3001【状态压缩DP】
题意: 给n个点m条无向边. 要求每个点最多走两次,要访问所有的点给出要求路线中边的权值总和最小. 思路: 三进制状态压缩DP,0代表走了0次,1,2类推. 第一次弄三进制状态压缩DP,感觉重点是对数 ...
- HDU 3001(状态压缩dp)
状态压缩dp的第一题! 题意:Mr ACMer想要进行一次旅行,他决定访问n座城市.Mr ACMer 可以从任意城市出发,必须访问所有的城市至少一次,并且任何一个城市访问的次数不能超过2次.n座城市间 ...
- hdu 3001 Travelling(状态压缩 三进制)
Travelling Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu 5094 Maze 状态压缩dp+广搜
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze 状态压缩dp+广搜 使用广度优先 ...
- hdu 4856 Tunnels 状态压缩dp
Tunnels Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
- Hdu 3001 Travelling 状态DP
题目大意 一次旅游,经过所有城市至少一次,并且任何一座城市访问的次数不能超过两次,求最小费用 每个城市最多访问两次,用状态0,1,2标识访问次数 把城市1~N的状态按照次序连接在一起,就组成了一个三进 ...
- HDU 3001 Travelling (状压DP + BFS)
题意:有一个人要去旅游,他想要逛遍所有的城市,但是同一个城市又不想逛超过2次.现在给出城市之间的来往路费,他可以选择任意一个点为起点. 问逛遍所有城市的最低路费是多少. 析:用三进制表示每个城市的访问 ...
- HDU 3001 Travelling ——状压DP
[题目分析] 赤裸裸的状压DP. 每个点可以经过两次,问经过所有点的最短路径. 然后写了一发四进制(真是好写) 然后就MLE了. 懒得写hash了. 改成三进制,顺利A掉,时间垫底. [代码] #in ...
随机推荐
- (转)MS14-068域内提权漏洞总结
0x01 漏洞起源 说到ms14-068,不得不说silver ticket,也就是银票.银票是一张tgs,也就是一张服务票据.服务票据是客户端直接发送给服务器,并请求服务资源的.如果服务器没有向域控 ...
- 51nod1967 路径定向(欧拉回路+结论题)
看到入度等于出度想到欧拉回路. 我们把边都变成无向边,有一个结论是偶数度的点都可以变成出入度相等的点,而奇数点的不行,感性理解分类讨论一下就知道是对的. 还有一个更好理解的结论是变成无向边后奇数点的个 ...
- Codeforces Round #301 (Div. 2)A B C D 水 模拟 bfs 概率dp
A. Combination Lock time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Linux系统之路——如何在CentOS7.2安装R和RStudio(Server)
使用ubuntu的小伙伴们直接使用命令sudo apt-get install r-base-dev或者r-base搞定.然而对于使用centos的我却一直卡在安装这一步,十分的悲催,只有羡慕的份,但 ...
- Codeforces 864E dp
题意: 房间着火了,里面有n件物品,每件物品有营救需要的时间t,被烧坏的最晚时间d,他的价值p,问能得到的最大价值,并且输出营救出来的物品编号 代码: //必然是先救存活时间短的即d小的,所以先排个序 ...
- echo 不换行
原文 http://blog.sina.com.cn/s/blog_4da051a6010184uk.html echo -n 不换行输出 $echo -n "123" $ec ...
- ZOJ 3778 C - Talented Chef 水题
LINK:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3778 题意:有n道菜,每道菜需要\(a_i\)道工序,有m个锅可 ...
- MySQL的连接类型
首先我们来创建两个数据表: 结构: 我们用内连接来查看一下: select * from test1 join test2 on test1.aid=test2.aid; 由于内连接是等值连接,所 ...
- HDFS默认副本数为什么是3
转载自: https://www.cnblogs.com/bugchecker/p/why_three_replications_for_HDFS_in_engineer.html HDFS采用一种称 ...
- Cloudera 安装
参考网址: http://tcxiang.iteye.com/blog/2087597 http://archive.cloudera.com/cdh5/ http://archive.clouder ...