题解降智警告

吐槽降智警告

思路降智警告

代码降智警告

题目传送门 洛谷

果然水题做多了连半道难点的都能给咱干蒙...

水题做多了降智  --鲁迅


题目大意:见传送门

心路历程见末尾

正解(大概):

状压

虽然有些难以理解,但是这道题里面有两种集合

一种是第i台电脑所联通的合起来就是S[i](代码内的line[i])

另一种是指已经用了哪几台电脑

思路开始

反正无论如何一定得用几个S[i]拼成一个全集(1<<n)-1

于是就有了

  1. struct Union
  2. {
  3. int A;
  4. }U[<<];//可以凑出来一个全集的几个电脑的集合
  5. int Uarr;
  6. void getU(int st,int A,int p)
  7. {
  8. <<n)-))//这几个电脑的line集合拼成了全集
  9. {
  10. U[Uarr].A=A;
  11. Uarr++;
  12. return;
  13. }
  14. if(p>=n) return;
  15. getU(st|line[p],A|(<<p),p+);//集合里加这个电脑
  16. getU(st,A,p+);//不加
  17. }

好孩子不要急着就看哦(大雾)

(写法比较朴素的说)

好了我们的重点部分已经完事了

(啥你这就完事了?)

确实想到这个就好写了...

如果你做过[NOIP2016]愤怒的小鸟

那这题就更好想到了

好了上代码

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using std::sort;
  5. int max(int a,int b){return a>b?a:b;}
  6. int n,m;
  7.  
  8. <<];
  9. ];
  10.  
  11. struct sta
  12. {
  13. int s,sc;
  14. }s[<<];
  15. int sarr;
  16. void getsta(int st,int sc,int p)
  17. {
  18. if(p>=n)
  19. {
  20. s[sarr].s=st;
  21. s[sarr].sc=sc;
  22. sarr++;
  23. return;
  24. }
  25. getsta(st|(<<p),sc+,p+);
  26. getsta(st,sc,p+);
  27. }
  28.  
  29. struct Union
  30. {
  31. int A;
  32. }U[<<];
  33. int Uarr;
  34. void getU(int st,int A,int p)
  35. {
  36. <<n)-))
  37. {
  38. U[Uarr].A=A;
  39. Uarr++;
  40. return;
  41. }
  42. if(p>=n) return;
  43. getU(st|line[p],A|(<<p),p+);
  44. getU(st,A,p+);
  45. }
  46.  
  47. bool cmp(sta a,sta b)//状态按照1的数量排序(咱就好这一手)
  48. {
  49. if(a.sc==b.sc) return a.s<b.s;
  50. else return a.sc<b.sc;
  51. }
  52.  
  53. void memclr()
  54. {
  55. memset(line,,sizeof(line));
  56. memset(dp,,sizeof(dp));
  57. Uarr=;
  58. sarr=;
  59. }
  60. int main()
  61. {
  62. ;
  63. while(scanf("%d",&n)!=EOF)
  64. {
  65. ) ;
  66. memclr();
  67. getsta(,,);
  68. sort(s,s+sarr,cmp);
  69. ;i<n;i++)
  70. {
  71. scanf("%d",&m);
  72. line[i]|=(<<i);
  73. ;j<=m;j++)
  74. {
  75. scanf("%d",&xin);
  76. line[i]|=(<<xin);
  77. }
  78. }
  79. getU(,,);
  80. ;si<sarr;si++)
  81. {
  82. ;Ui<Uarr;Ui++)
  83. {
  84. if((s[si].s&U[Ui].A)==U[Ui].A)
  85. {
  86. dp[s[si].s]=max(dp[s[si].s],dp[s[si].s^U[Ui].A]+);
  87. }
  88. }
  89. }
  90. printf(<<n)-]);
  91. }
  92. ;
  93. }

好孩子要自己思考~

看上去做的十分轻松

实际上

心路历程如下:

一开始:emmmm外层电脑使用状态里面枚举下一个使用每个电脑然后dp里存v和状态...

写完:???

等下等下从下面能继承过来一堆状态啊啊啊

变成(2^n)^k了啊啊啊啊啊

心态爆炸

Ah~(油库里音)

切题后:

啥?子集的子集是3^n?

完了我菜死了

陷入沉思...

3^n*n似乎也会T死

这至少证明了我原先的思路似乎没啥可行性而不是半途而废(什么逻辑)

心态平衡了

Ah~(油库里音)


以上

本题完结

记住

水题做多了降智

我没说过这句话 --鲁迅

[UVA11825]Hackers' Crackdown(状压dp)的更多相关文章

  1. UVa 11825 Hackers' Crackdown (状压DP)

    题意:给定 n 个计算机的一个关系图,你可以停止每台计算机的一项服务,并且和该计算机相邻的计算机也会终止,问你最多能终止多少服务. 析:这个题意思就是说把 n 台计算机尽可能多的分成一些组,使得每组的 ...

  2. UVA11825 黑客的攻击 Hackers' Crackdown 状压DP,二进制,子集枚举

    题目链接Click Here [题目描述] 假如你是一个黑客,侵入了一个有着\(n\)台计算机(编号为\(1.2.3....n\))的网络.一共有\(n\)种服务,每台计算机都运行着所有服务.对于每台 ...

  3. UVA 11825 Hackers’ Crackdown 状压DP枚举子集势

    Hackers’ Crackdown Miracle Corporations has a number of system services running in a distributed com ...

  4. UVa 11825 (状压DP) Hackers' Crackdown

    这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的. 题意: 有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服 ...

  5. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  6. nefu1109 游戏争霸赛(状压dp)

    题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...

  7. poj3311 TSP经典状压dp(Traveling Saleman Problem)

    题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...

  8. [NOIP2016]愤怒的小鸟 D2 T3 状压DP

    [NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...

  9. 【BZOJ2073】[POI2004]PRZ 状压DP

    [BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...

随机推荐

  1. HTTP权威指南阅读记录 - 第一章

    最近终于开始看<HTTP权威指南>了,第一章主要是简介一些基本的概念.下面列出一些常用,但还不是很了解的简单概念. 一.常见概念: 1.媒体类型 因特网上有数千种不同的数据类型,HTTP仔 ...

  2. SPOOL 命令使用实例【oracle导出纯文本格式文件】

    SPOOL 命令使用实例[oracle导出纯文本格式文件] SET echo off              --在用start命令执行一个sql脚本时,是否显示脚本中正在执行的SQL语句: SET ...

  3. 杂项-DB:Druid

    ylbtech-杂项-DB:Druid Apache Druid (incubating) is a high performance analytics data store for event-d ...

  4. bzoj3561

    3561: DZY Loves Math VI Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 240  Solved: 163[Submit][Sta ...

  5. libnids 中哈希表的建立

    //hash.c #include <sys/types.h>#include <sys/time.h>#include <stdio.h>#include < ...

  6. 基于Numpy的神经网络+手写数字识别

    基于Numpy的神经网络+手写数字识别 本文代码来自Tariq Rashid所著<Python神经网络编程> 代码分为三个部分,框架如下所示: # neural network class ...

  7. mysql之distinct

    记录一下这几天看mysql必知必会的小知识点: 关于mysql查询不同的行 比如记录表中 查询有多少个城市 可能查出很多城市 可以用distinct 来解决这个问题 SELECT DISTINCT c ...

  8. 洛谷 P2142 高精度减法(模板)

    题目描述 高精度减法 输入输出格式 输入格式: 两个整数a,b(第二个可能比第一个大) 输出格式: 结果(是负数要输出负号) 输入输出样例 输入样例#1: 2 1 输出样例#1: 1 说明 20%数据 ...

  9. Lightoj 1020 - A Childhood Game (博弈)

    题目链接: 1020 - A Childhood Game 题目描述: Alice和Bob在玩弹珠游戏,两人轮流拿走弹珠,每次只能拿走一个或者两个,当Alice作为先手时谁拿走最后一个就是输家,而Bo ...

  10. C# 调用非托管函数

    C#通过DllImport可以直接调用Windows中的一些功能.C++中已经编写好的一些方法: DllImport所在的名字空间:System.Runtime.InteropServices; Dl ...