Travelling (三进制+状压dp)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read(){
int x=,f=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
} /***********************************************************/ int n, m; // n < = 10
const int maxn = 6e4+;
int d[][maxn];
//用三进制形式来表示状态
int dist[][];
//表示路径
int t[];
int cnt, state[maxn];
int temp; //判断S的三进制是否没有一个0
bool legal(int S){
bool ok = true;
for(int i = ;i <= n-;i++){
if(S% == ){
ok = false;
break;
}
S /= ;
}
return ok;
} void init(){
temp = ;
for(int i = ;i <= ;i++){
t[i] = temp;
temp *= ;
}
} //i点在集合S中是否出现了至少一次
inline bool in(int i, int S){
for(int j = ;j < i;j++)
S /= ;
if(S%) return true;
else return false;
} int dp(int i, int S){
if(d[i][S] >= ) return d[i][S];
int &ans = d[i][S];
ans = 1e9;
int S1 = S - t[i];
for(int j = ;j < n;j++){
if(j != i && in(j, S1) && dist[j][i] != -)
ans = min(ans, dp(j, S1) + dist[j][i]);
}
return ans;
} int main(){
init();
while(~scanf("%d %d", &n, &m)){
int max_3 = ;
for(int i = ;i < n;i++)
max_3 += t[i];
cnt = ;
for(int S = max_3;S < t[n];S++){
if(legal(S))
state[cnt++] = S;
}
memset(dist, -, sizeof(dist));
for(int i = ;i < m;i++){
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
a--;b--;
//更新长度
if(dist[a][b] == - || dist[a][b] > c)
dist[a][b] = dist[b][a] = c;
}
memset(d, -, sizeof(d));
for(int i = ;i < n;i++)
d[i][t[i]] = ; int sum = dp(, max_3);
for(int i = ;i < n;i++){
for(int j = ;j < cnt;j++){
sum = min(sum, dp(i, state[j]));
}
}
if(sum == 1e9) printf("-1\n");
else printf("%d\n", sum);
}
return ;
}
Travelling (三进制+状压dp)的更多相关文章
- ZRDay6A. 萌新拆塔(三进制状压dp)
题意 Sol 这好像是我第一次接触三进制状压 首先,每次打完怪之后吃宝石不一定是最优的,因为有模仿怪的存在,可能你吃完宝石和他打就GG了.. 因此我们需要维护的状态有三个 0:没打 1:打了怪物 没吃 ...
- HDU 3001 三进制状压DP
N个城市,M条道路,每条道路有其经过的代价,每一个城市最多能够到达两次,求走全然部城市最小代价,起点随意. 三进制状压.存储每一个状态下每一个城市经过的次数. 转移方程: dp[i+b[k]][k]= ...
- hdu 3001 Travelling 经过所有点(最多两次)的最短路径 三进制状压dp
题目链接 题意 给定一个\(N\)个点的无向图,求从任意一个点出发,经过所有点的最短路径长度(每个点至多可以经过两次). 思路 状态表示.转移及大体思路 与 poj 3311 Hie with the ...
- HDU - 3001 Travelling(三进制状压dp)
Travelling After coding so many days,Mr Acmer wants to have a good rest.So travelling is the best ch ...
- HDU 3001 三进制 状压dp
Travelling Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- UVA 10817 - Headmaster's Headache(三进制状压dp)
题目:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=20&pag ...
- 三进制状压 HDOJ 3001 Travelling
题目传送门 题意:从某个点出发,所有点都走过且最多走两次,问最小花费 分析:数据量这么小应该是状压题,旅行商TSP的变形.dp[st][i]表示状态st,在i点时的最小花费,用三进制状压.以后任意进制 ...
- Codeforces Round #297 (Div. 2) [ 折半 + 三进制状压 + map ]
传送门 E. Anya and Cubes time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- hdu3001(三进制状压)
题目大意: 现在给你一个有n个点和m条边的图,每一条边都有一个费用,每个点不能经过超过两次,求所有点至少遍历一次的最小费用 其中n<=10 m没有明确限制(肯定不会超过1e5) 一看到这个数据范 ...
随机推荐
- Arc065_E Manhattan Compass
平面上有$N$个点$(X_i\space, Y_i)$,定义$D(a,b)=|X_a-X_b|+|Y_a-Y_b|$. 如果你当前在$(p,q)$,这个无序二元组(即$(p,q)$和$(q,p)$被认 ...
- jcrop的bug
1 360(7.1.1.620,内核:31.0.1650.63)的极速模式下,出现裁剪框后,鼠标点击,页面就会滑动到底部. 查看了下源码,发现是下面的代码: function watchKeys() ...
- spark减少提交jar包处理
spark一个应用,算上依赖一百多兆.每一次都如此,坑. 首先是<packing>jar</packing>这只为打包为jar,在plugin中增加一个assembly插件,这 ...
- 在CentOS 7上安装Node.js的4种方法(包含npm)
Node.js和Javascript有着千丝万缕的联系,可以说Node.js让Javascript显得从未如此强大.好吧…微魔其实是个门外汉…但是这并不能阻碍微魔学习探索未知的信心~今天在国外闲逛,看 ...
- mysql 用户和存储过程相关命令
如何显示所有的存储过程?select `name` from mysql.proc where db='db_name' and `type`='procedure';orshow procedure ...
- findBug 错误修改指南
1. EC_UNRELATED_TYPESBug: Call to equals() comparing different types Pattern id: EC_UNRELATED_TYPE ...
- NET Remoting 最简单示例
NET Remoting 最简单示例 2014-01-21 15:29 10492人阅读 评论(4) 收藏 举报 分类: .NET(6) 版权声明:本文为博主原创文章,未经博主允许不得转载. 学习 ...
- 问题7:如何实现用户的历史记录功能(最多n条)
实例:制作猜字游戏,添加历史记录功能,显示用户最近猜过的数字 解决方案:使用容量为n的队列存储历史记录 使用标准库colections中的deque,一个双端循环队列 程序退出前,可以使用pickle ...
- 【转】 Pro Android学习笔记(四九):ActionBar(2):Action图标区
目录(?)[-] ActionBar的隐藏和现实 ActionBar的action图标区 ActionBar的隐藏和现实 ActionBar bar = getActionBar();bar.hide ...
- HTTP之cookie技术
Cookie由变量名和值组成, 其属性中既有标准的Cookie变量, 也有用户自己创建的变量,属性中变量是用"变量=值"形式来保存 Cookie格式如下: Set-Cookie: ...