题意:变形tsp 必须搞成三进制

#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a; i<=b; i++)
int n,m;
const int INF = 0x3f3f3f3f;
int g[15][15];
int dp[300000][11];
int status[20];
int getstatus()
{int res = 0;for(int i=n-1; i>=0; i--)res = res*3 + status[i];return res;
}
int power(int a, int b)
{int res = 1;while(b){if(b&1) res*=a;a*=a;b>>=1;}return res;
}
int to(int s)
{memset(status, 0, sizeof(status));int st = 0;while(s){status[st++] = s%3;s/=3;}
}
int p[15];
int main()
{p[0] = 1;for(int i=1; i<=11; i++) p[i] = 3*p[i-1];while(cin>>n>>m){memset(dp, INF, sizeof(dp));memset(g, INF, sizeof(g));for(int i=0; i<n; i++) g[i][i] = 0;rep(i, 1, m){int u,v,w;scanf("%d %d %d", &u, &v, &w);u--;v--;g[u][v] = min(g[u][v], w);g[v][u] = min(g[v][u], w);}for(int i=0; i<n; i++) dp[p[i]][i] = 0;for(int i=0; i<p[n]; i++){to(i);for(int j=0; j<n; j++){if(status[j] == 0) continue;status[j] --;int temp = getstatus();for(int k=0; k<n; k++)if(status[k] != 0&&k!=j)dp[i][j] = min(dp[i][j], dp[temp][k] + g[j][k]); status[j] ++;}}int res = INF;for(int s=1; s<p[n]; s++){bool flag = true;to(s);for(int i=0; i<n; i++) if(status[i] == 0) flag= false;if(flag){for(int i=0; i<n; i++)res = min(res, dp[s][i]);}}if(res == INF)cout<<-1<<endl;elsecout<<res<<endl;}return 0;
}

hdu 3001 tsp问题/三进制相关推荐

  1. hdu 5755 Gambler Bo 三进制高斯消元(开关问题变形)

    题目链接 题意: 给出一个模3意义下的矩阵,每次选中一个元素就可以使得自身+2,上下左右元素+1.求所有元素变成0的一种解. 思路: 这个题目高斯消元复杂度明明是O(n^3)的啊,这个题O((n*m) ...

  2. HDU 3001 三进制状压DP

    HDU 3001 三进制状压DP N个城市,M条道路,每条道路有其经过的代价,每一个城市最多能够到达两次,求走全然部城市最小代价,起点随意. 三进制状压.存储每一个状态下每一个城市经过的次数. 转移方 ...

  3. HDU 3001 Travelling (三进制状压dp)

    题意 n(n<=10)n(n个城市,知道每个城市间的旅行费用,但每个城市最多走两遍.问最小花费是多少 . 也就是每个城市可以走两次的tsp问题. 分析 最多走两次,三进制0 1 2可满足,即用三 ...

  4. HDU3001 Traveling (状压dp+三进制+Tsp问题总结)

    (1)这道题最多可以走两次,所以有0, 1, 2三种状态,所以我们要用三进制 如果要用三进制,就要自己初始化两个数组, 一个是3的n次方,一个是三进制数的第几位的数字是什么 void init() { ...

  5. HDU 3001 Travelling

    http://acm.hdu.edu.cn/showproblem.php?pid=3001      题意:小明想去n个城市游玩,m条路,从一个城市到达另一个城市有一定的花费,每个城市最多可以走两次 ...

  6. hdu3001 Travelling 三进制状态压缩dp

    tsp类型,只是这里面的点最多可以访问2次. 所以用一个来表示访问了多少次,正好是三进制. 对于每个状态i,先处理出第j位为几,即num[i][j],方便使用. 用dp[i][j]表示,状态i时,以j ...

  7. [清华集训2016]石家庄的工人阶级队伍比较坚强——三进制FWT

    题目链接: [清华集训2016]石家庄的工人阶级队伍比较坚强 题目大意:有$n=3^m$个人玩石头剪刀布,共$t$轮游戏,每轮每个人要和包括自己的所有人各进行$m$次石头剪刀布.每个人在$m$轮中的决 ...

  8. hdu3001(三进制状压)

    题目大意: 现在给你一个有n个点和m条边的图,每一条边都有一个费用,每个点不能经过超过两次,求所有点至少遍历一次的最小费用 其中n<=10 m没有明确限制(肯定不会超过1e5) 一看到这个数据范 ...

  9. Travelling (三进制+状压dp)

    题目链接 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 inline ll rea ...

最新文章

  1. php日志接入rsyslog,rsyslog和在PHP上的应用
  2. jzoj4282-[NOIP2015模拟10.29B组]平方数游戏【构造】
  3. 策略模式应用场景和uml_策略模式
  4. 【转】MongoDB介绍及下载与安装
  5. 5.PHP 命令行模式
  6. 安装ie11提示计算机安装了更新的版本,离线安装IE11浏览器提示quot;获取更新quot;解决方法 - 191路由网...
  7. 「运维有小邓」如何避免企业AD域弱密码
  8. JAVA毕业设计共享汽车管理系统计算机源码+lw文档+系统+调试部署+数据库
  9. 在西安参加Java培训该怎么学习?
  10. html返回顶部按钮图片,goToTop(回到顶部)按钮的制作
  11. (原創) 如何將16進位的ACSII值轉成相對應的字元? (C/C++) (C)
  12. 色彩nbsp;标准卡大全及配色方案
  13. 基于python的中文词频分析
  14. 《考取HCIA证书看我就够了》第五篇:[HCIA-IoT]物联网技术之感知层技术概览
  15. maya2018放大字体及窗口
  16. ORACLE 触发器控制用户登录之权限限制
  17. STM32驱动直流电机(一)驱动电路的介绍
  18. 学校计算机机房 管理 总结,学校计算机机房的建设与管理
  19. CSS3常用动画效果合集(最全)
  20. php 翻页电子书,ThinkPHP5.0-快速入门手册(新手教程版)

热门文章

  1. elxel表格纸张尺寸_用Excel轻松打印支票方法.pptx
  2. 有道js逆向(webpack,调用crypto库实现)【超级详细】
  3. python实现kindle每天推送博客1----kindle推送原理,python实现qq邮箱登录及邮件发送
  4. 月经不同阶段的调理(罗大伦)
  5. Exploratory Social Network Analysis with Pajek(第三版)3
  6. Excel转Pajek可读文件格式(.net)Python实现
  7. 深度学习:使用visdom可视化训练过程时,出现蓝屏,不能正常显示的解决办法
  8. nginx 负载均衡配置
  9. 地铁座位的设计,对乘客优选位置的影响
  10. 分布式键值存储系统ETCD介绍