题目大意:给定一个有重边,边有权值的无向图。从某一个点出发,求到达所有的点需要的最少费用,并且限制两点之间只有一条路径。费用的计算公式为:所有边的费用之和。而边$x->y$的费用就为:$y$到初始点的之间点的个数(包括起始点) $\times$ 边权。

题解:状压$DP$,令$f_{i,j}$表示当前深度为$i$,状态为$j$的最小花费

$$f_{i,s}=f_{i-1,t}+g_{s,t}\times(i−1)$$

再开一个数组$c_{s,i}表示状态$s$挖到点$i$的最小花费(不考虑深度)

用边权更新$c$数组,再用$c$数组更新$g$数组即可

卡点:1.$c$数组第二维开太小

C++ Code:

  1. #include <cstdio>
  2. #include <cstring>
  3. #define lb(x) (x & -x)
  4. #define maxn 13
  5. using namespace std;
  6. const int inf = 0x3f3f3f3f;
  7. int n, m, U, ans = inf;
  8. int e[maxn][maxn], c[maxn][1 << maxn | 3];
  9. int g[1 << maxn | 3][1 << maxn | 3], f[maxn][1 << maxn | 3];
  10. inline void getmin(int &a, int b) {if (a > b) a = b;}
  11. inline int min(int a, int b) {return a < b ? a : b;}
  12. int main() {
  13. scanf("%d%d", &n, &m); U = 1 << n;
  14. if (n == 1) {
  15. puts("0");
  16. return 0;
  17. }
  18. memset(e, 0x3f, sizeof e);
  19. for (int i = 0; i < m; i++) {
  20. int a, b, c;
  21. scanf("%d%d%d", &a, &b, &c);
  22. e[a][b] = e[b][a] = min(c, e[a][b]);
  23. }
  24. for (int i = 1; i <= n; i++) {
  25. for (int j = 1; j < U; j++) {
  26. c[i][j] = inf;
  27. if (!(j & (1 << i - 1))) {
  28. for (int k = 1; k <= n; k++) {
  29. if (j & (1 << k - 1)) getmin(c[i][j], e[i][k]);
  30. }
  31. }
  32. }
  33. }
  34. for (int i = 1; i < U; i++) {
  35. for (int j = i & i - 1; j; j = i & j - 1) {
  36. int tmp = i ^ j;
  37. for (int k = 1; k <= n; k++) {
  38. if (tmp & (1 << k - 1)) {
  39. g[i][j] += c[k][j];
  40. if (g[i][j] > inf) g[i][j] = inf;
  41. }
  42. }
  43. }
  44. }
  45. memset(f, 0x3f, sizeof f);
  46. for (int i = 1; i <= n; i++) f[1][1 << i - 1] = 0;
  47. for (int i = 2; i <= n; i++) {
  48. for (int j = 1; j < U; j++) {
  49. for (int k = j & j - 1; k; k = j & k - 1) {
  50. int tmp = inf;
  51. if (g[j][k] ^ inf) tmp = g[j][k] * (i - 1);
  52. if (f[i - 1][k] ^ inf) getmin(f[i][j], f[i - 1][k] + tmp);
  53. }
  54. }
  55. getmin(ans, f[i][U - 1]);
  56. }
  57. printf("%d\n", ans);
  58. return 0;
  59. }

  

[NOIP2017 TG D2T2]宝藏的更多相关文章

  1. [NOIP2017 TG D2T2]宝藏(模拟退火)

    题目大意:$NOIPD2T2$宝藏 题解:正常做法:状压DP .这次模拟退火,随机一个排列,$O(n^2)$贪心按排列的顺序加入生成树 卡点:没开$long\;long$,接受较劣解时判断打错,没判$ ...

  2. 【NOIP题解】NOIP2017 TG D2T3 列队

    列队,NOIP2017 TG D2T3. 树状数组经典题. 题目链接:洛谷. 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. ...

  3. [NOIP2018 TG D2T2]填数游戏

    题目大意:$NOIP2018\;TG\;D2T2$ 题解:在skip2004的博客基础上修改的,也是暴搜. 说明一下把vector改成数组并不可以通过此题,记录. 结论:在$m>n+1$时答案为 ...

  4. NOIP2017 D2T2宝藏

    考场上写的prim一遍过了大样例也没想什么别的,反例也没举出来. 后来才知道由于要乘上深度所以无法贪心. 正解是状压但我不会,考后一个爆搜碾过去了. 心凉. #include<bits/stdc ...

  5. NOIP2017 D2T2 宝藏

    洛谷P3959 其实就是一道暴力搜索题……只是需要一个状态压缩的剪枝比较难想而已 这根本不叫dfs!只是一个递归而已……开始就被dfs坑了 思路: 首先一个基本的预处理 数据范围n≤12,m≤5000 ...

  6. noip2017 TG 游记

    嗨小朋友们大家好,还记得我是谁吗?我就是为GG代言的蒟蒻--xzz 今天呐我特别的要向HN的dalao们ZJ的巨佬们还有全国的神犇们问声好 为什么呢因为我们在2017年11月份来到了吔屎的长沙理工大学 ...

  7. [NOIP2017 TG D2T3]列队

    题目大意:有一个$n \times m$的方阵,第$i$行第$j$列的人的编号是$(i-1) \times m + j$. 现在有$q$个出列操作,每次让一个人出列,然后让这个人所在行向左看齐,再让最 ...

  8. NOIP2017[提高组] 宝藏 题解

    解析 我们观察范围可以发现n非常的小,(一般来说不是搜索就是状压dp)所以说对于这题我们可以用记忆化搜索或者dp,我们发现起点不同那么最终答案也就不同,也就是说答案是跟起点有关的,于是我们便可以想到去 ...

  9. NOIP2017 Day2 T2 宝藏(状压DP)

    $O(n*3^n)$好难想...还有好多没见过的操作 令$f[i][j]$表示最深深度为i,点的状态为j的最小代价,每次枚举状态$S$后,计算$S$的补集里的每个点与S里的点的最小连边代价,再$O(3 ...

随机推荐

  1. css公共类

    /*iOS弹性滚动*/ .scrolling{ position: absolute; width: 100%; height:100%; overflow-x:hidden; overflow-y: ...

  2. PHP----composer安装和TP5验证码类

    妈的,想用TP5做个项目,用到登录验证码了,结果煞笔TP5不内置了,需要用Composer,用吧,来下载 1.安装Composer 1.1 更新 sudo apt-get update 1.2 安装w ...

  3. Leecode刷题之旅-C语言/python-1.两数之和

    开学后忙的焦头烂额(懒得很),正式开始刷leecode的题目了. 想了想c语言是最最基础的语言,虽然有很多其他语言很简单,有更多的函数可以用,但c语言能煅炼下自己的思考能力.python则是最流行的语 ...

  4. ctf题目writeup(4)

    2019.1.31 题目:这次都是web的了...(自己只略接触隐写杂项web这些简单的东西...) 题目地址:https://www.ichunqiu.com/battalion 1. 打开链接: ...

  5. 线程基础三 使用C#中的lock关键词

    C#中lock关键字主要是为确保当一个线程使用某些资源时,同时无法其他线程无法使用该资源.下面我们看看下面的小例子. static void Main(string[] args) { var c = ...

  6. 42-EF Core Migration

    1-常用命令 1-由于2.1版本有点不一样,不会自动创建ApplicationUser类,发现合并没效果.暂时略 增加一个字段 E:\coding\netcore\IdentitySample> ...

  7. 【Consul】Consul架构-Consensus协议

    Consul使用Consensus协议提供一致性(Consistency)--CAP定义的一致性.Consensus协议是基于"Raft:In search of an Understand ...

  8. 【MVC】 小问题

    [MVC] 小问题 1. url 传参中文乱码 : encodeURIComponent 转码 2. RedirectToAction 重定向 : ajax 调用无效, 直接 url 访问有效 3. ...

  9. JVM 什么时候会触发FGC

    1:System.gc(); 2:老年代满了 没啥好说的从年轻代去往老年代的 3:JDK7或JDK6中永久区满了 得看是否还会有分配,如果没有就不会进行FGC,不过CMS GC下会看到不停地CMS G ...

  10. COJ 2192: Wells弹键盘 (dp)

    2192: Wells弹键盘 Description Wells十分羡慕和佩服那些会弹钢琴的人比如子浩君,然而Wells只会弹键盘…… Wells的键盘只有10个键,从1,2,3,……,9,0,如下图 ...