Travelling (三进制+状压dp)
题目链接
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 inline ll read(){ 5 int x=0,f=1;char ch=getchar(); 6 while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();} 7 while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} 8 return x*f; 9 } 10 11 /***********************************************************/ 12 13 int n, m; // n < = 10 14 const int maxn = 6e4+5; 15 int d[12][maxn]; 16 //用三进制形式来表示状态 17 int dist[15][15]; 18 //表示路径 19 int t[12]; 20 int cnt, state[maxn]; 21 int temp; 22 23 //判断S的三进制是否没有一个0 24 bool legal(int S){ 25 bool ok = true; 26 for(int i = 0;i <= n-1;i++){ 27 if(S%3 == 0){ 28 ok = false; 29 break; 30 } 31 S /= 3; 32 } 33 return ok; 34 } 35 36 void init(){ 37 temp = 1; 38 for(int i = 0;i <= 10;i++){ 39 t[i] = temp; 40 temp *= 3; 41 } 42 } 43 44 //i点在集合S中是否出现了至少一次 45 inline bool in(int i, int S){ 46 for(int j = 0;j < i;j++) 47 S /= 3; 48 if(S%3) return true; 49 else return false; 50 } 51 52 int dp(int i, int S){ 53 if(d[i][S] >= 0) return d[i][S]; 54 int &ans = d[i][S]; 55 ans = 1e9; 56 int S1 = S - t[i]; 57 for(int j = 0;j < n;j++){ 58 if(j != i && in(j, S1) && dist[j][i] != -1) 59 ans = min(ans, dp(j, S1) + dist[j][i]); 60 } 61 return ans; 62 } 63 64 int main(){ 65 init(); 66 while(~scanf("%d %d", &n, &m)){ 67 int max_3 = 0; 68 for(int i = 0;i < n;i++) 69 max_3 += t[i]; 70 cnt = 0; 71 for(int S = max_3;S < t[n];S++){ 72 if(legal(S)) 73 state[cnt++] = S; 74 } 75 memset(dist, -1, sizeof(dist)); 76 for(int i = 0;i < m;i++){ 77 int a, b, c; 78 scanf("%d%d%d", &a, &b, &c); 79 a--;b--; 80 //更新长度 81 if(dist[a][b] == -1 || dist[a][b] > c) 82 dist[a][b] = dist[b][a] = c; 83 } 84 memset(d, -1, sizeof(d)); 85 for(int i = 0;i < n;i++) 86 d[i][t[i]] = 0; 87 88 int sum = dp(0, max_3); 89 for(int i = 0;i < n;i++){ 90 for(int j = 0;j < cnt;j++){ 91 sum = min(sum, dp(i, state[j])); 92 } 93 } 94 if(sum == 1e9) printf("-1\n"); 95 else printf("%d\n", sum); 96 } 97 return 0; 98 }
转载于:https://www.cnblogs.com/ouyang_wsgwz/p/9823539.html
Travelling (三进制+状压dp)相关推荐
- HDU 3001 Travelling (三进制状压dp)
题意 n(n<=10)n(n个城市,知道每个城市间的旅行费用,但每个城市最多走两遍.问最小花费是多少 . 也就是每个城市可以走两次的tsp问题. 分析 最多走两次,三进制0 1 2可满足,即用三 ...
- HDU 3001 三进制状压DP
HDU 3001 三进制状压DP N个城市,M条道路,每条道路有其经过的代价,每一个城市最多能够到达两次,求走全然部城市最小代价,起点随意. 三进制状压.存储每一个状态下每一个城市经过的次数. 转移方 ...
- HDU-3001(旅行商问题+三进制状压dp)
#include <bits/stdc++.h> using namespace std; /* 题目大意: 给定n个点m条边的带权无向图,问有没有可能从n个点的其中一个出发,走遍其余n ...
- 涂抹果酱(三进制状压dp)
涂抹果酱(状压dp) 题目描述 输入描述: 输出描述: 示例 输入 输出 说明 备注: 题目思路: 代码 欢迎关注微信公众号:Java后台开发 题目描述 Tyvj两周年庆典要到了,Sam想为Tyvj做 ...
- hdu3001(三进制状压)
题目大意: 现在给你一个有n个点和m条边的图,每一条边都有一个费用,每个点不能经过超过两次,求所有点至少遍历一次的最小费用 其中n<=10 m没有明确限制(肯定不会超过1e5) 一看到这个数据范 ...
- 三进制状压动态规划【涂抹果酱】 题解
前言:好不容易搞懂了这道题,感觉网上能找到的题解在我有疑问的地方都讲的不是很细,所以我来写一篇吧. 题目描述 Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕.蛋糕俯视图是一个 N×M ...
- hdu3001 Travelling 三进制状态压缩dp
tsp类型,只是这里面的点最多可以访问2次. 所以用一个来表示访问了多少次,正好是三进制. 对于每个状态i,先处理出第j位为几,即num[i][j],方便使用. 用dp[i][j]表示,状态i时,以j ...
- 蒜头君救人 状压DP
蒜头君救人 题目描述 蒜头君是一个乐于助人的好孩子,这天他所在的乡村发生了洪水,有多名村民被困于孤岛上,于是蒜头君决定去背他们离开困境,假设蒜头君所在的村子是 n×m n×m 的网格,网格中.号代表平 ...
- CF1556F-Sports Betting【状压dp,数学期望】
正题 题目链接:https://www.luogu.com.cn/problem/CF1556F 题目大意 nnn个点的一张竞赛图,每个点有一个权值aia_iai,(i,j)(i,j)(i,j)之间 ...
最新文章
- Hbase报错ERROR: KeeperErrorCode = NoNode for /hbase/master
- Cadence IC使用教程
- sqlserver compact sdf, sqlite 数据库 在net中相对路径设置方法 - 摘自网络
- python基础语法类型_Python基本语法[2]-简单数据类型,基础
- pydobc连接sql server_python – PyOdbc无法连接到SQL Server实例
- Linux系统启动需要多长时间,Linux系统启动时间的极限优化是怎样进行的?
- SecondNamenode作用
- CMS-订单系统的分布式事务如何处理
- 量子通讯加密技术的技术原理
- 计算机网络之物理层(定义标准+码间串扰(奈氏准则、香农定理)+基带信号、宽带信号+编码、调制+传输介质)
- qt在window实现二维码识别
- Typhon升级到5.8,编译原来程序出现提示:Compilation raised exception internally
- [RK3399][Android7.1] Audio中的Ducking模式
- Windows 域之 组、OU
- 关于duilib在Layered Window下绘制文字不正常的BUG
- SPI总线通信——基于STM32MP157A
- 新机如何把机械硬盘中的系统克隆到固态硬盘
- DataX实践趟坑大全
- Wpf应用程序进入全屏和退出全屏
- 南京联通试点电力线上网 家庭用户带宽达到2M
热门文章
- 通配符 泛域名 linux,openssl签署自己的泛域名(通配符)证书
- 简单linux蠕虫,清除Linux系统上的蠕虫程序Ramen
- list转map stream_advancedday10可变参数不可变集合及Stream流
- 百度网络推广介绍网站在更换老域名时都需注意哪些?
- 企业为实现网络营销更要将网络营销重点放在用户价值上
- 网站SEO优化技巧的“减法运算”
- project 模板_18个施工进度计划横道图模板,自动出图超方便,全部在这儿给你准好了...
- 开发日记-20190505 关键词 汇编语言(四) 自定义分级视图demo
- RethinkDB是什么?—— 面向文档的NOSQL数据库,MVCC+Btree索引,pushes JSON to your apps in realtime采用push思路,优化的ssd存储...
- python3 签名 sha md5