题解降智警告

吐槽降智警告

思路降智警告

代码降智警告

题目传送门 洛谷

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

水题做多了降智  --鲁迅


题目大意:见传送门

心路历程见末尾

正解(大概):

状压

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

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

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

思路开始

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

于是就有了

 struct Union
 {
     int A;
 }U[<<];//可以凑出来一个全集的几个电脑的集合
 int Uarr;
 void getU(int st,int A,int p)
 {
     <<n)-))//这几个电脑的line集合拼成了全集
     {
         U[Uarr].A=A;
         Uarr++;
         return;
     }
     if(p>=n) return;
     getU(st|line[p],A|(<<p),p+);//集合里加这个电脑
     getU(st,A,p+);//不加
 }

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

(写法比较朴素的说)

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

(啥你这就完事了?)

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

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

那这题就更好想到了

好了上代码

 #include<cstdio>
 #include<cstring>
 #include<algorithm>
 using std::sort;
 int max(int a,int b){return a>b?a:b;}
 int n,m;

 <<];
 ];

 struct sta
 {
     int s,sc;
 }s[<<];
 int sarr;
 void getsta(int st,int sc,int p)
 {
     if(p>=n)
     {
         s[sarr].s=st;
         s[sarr].sc=sc;
         sarr++;
         return;
     }
     getsta(st|(<<p),sc+,p+);
     getsta(st,sc,p+);
 }

 struct Union
 {
     int A;
 }U[<<];
 int Uarr;
 void getU(int st,int A,int p)
 {
     <<n)-))
     {
         U[Uarr].A=A;
         Uarr++;
         return;
     }
     if(p>=n) return;
     getU(st|line[p],A|(<<p),p+);
     getU(st,A,p+);
 }

 bool cmp(sta a,sta b)//状态按照1的数量排序(咱就好这一手)
 {
     if(a.sc==b.sc) return a.s<b.s;
     else return a.sc<b.sc;
 }

 void memclr()
 {
     memset(line,,sizeof(line));
     memset(dp,,sizeof(dp));
     Uarr=;
     sarr=;
 }
 int main()
 {
 ;
 while(scanf("%d",&n)!=EOF)
 {
     ) ;
     memclr();
     getsta(,,);
     sort(s,s+sarr,cmp);
     ;i<n;i++)
     {
         scanf("%d",&m);
         line[i]|=(<<i);
         ;j<=m;j++)
         {
             scanf("%d",&xin);
             line[i]|=(<<xin);
         }
     }
     getU(,,);
     ;si<sarr;si++)
     {
         ;Ui<Uarr;Ui++)
         {
             if((s[si].s&U[Ui].A)==U[Ui].A)
             {
                 dp[s[si].s]=max(dp[s[si].s],dp[s[si].s^U[Ui].A]+);
             }
         }
     }
     printf(<<n)-]);
 }
     ;
 }

好孩子要自己思考~

看上去做的十分轻松

实际上

心路历程如下:

一开始: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. iOS10 优化APP首次安装网络权限提示方案

    我刚经历了一场末日(停电),特别是在你想写文档的时候... 言归正传,今天的问题是解决iOS10系统下首次按钮APP弹出的网络权限提示所带来了问题以及优化. 起因 查了相关文章知道由于大陆工信部出台的 ...

  2. ExecuteNonQuery()的用法

    ExecuteNonQuery()的用法 下面我们将详细讲解如何在Page_Load()中对数据库的增加.删除.修改,最后我们再来总结一下ExecuteNonQuery(),ExecuteScalar ...

  3. python-----删除文件到回收站

    python删除文件一般使用os.remove,但这样删是直接删除文件,不删到回收站的,那么想删除文件到回收站怎么办? 这时,就需要使用shell模块了 from win32com.shell imp ...

  4. UVaLive 6833 Miscalculation (表达式计算)

    题意:给定一个表达式,只有+*,然后问你按照法则运算和从左到右计算结果有什么不同. 析:没什么可说的,直接算两次就好. 代码如下: #pragma comment(linker, "/STA ...

  5. SVN请求认证信息

    WIN10:C:\Users\Home目录\AppData\Roaming\Subversion Window Server 系统:C:\Users\Home目录\AppData\Roaming\Su ...

  6. 洛谷P4397 [JLOI2014]聪明的燕姿

    传送门 dfs的时候莫名其妙深度太大过不了……然后死活找不出哪里错…… 首先,约数和这东西是个积性函数,或者直接点的话就是如果$$n=p_1^{a_1}p_2^{a_2}p_3^{a_3}…p_m^{ ...

  7. 公司4:JrVue主题定制-2

    页面折叠布局:(折叠按钮.transition动画.git项目池模块分支) 布局组件(template): <el-container> <el-aside> <!-- ...

  8. Hdu 3487 play the chain

    Description 瑶瑶很喜欢玩项链,她有一根项链上面有很多宝石,宝石从1到n编号. 首先,项链上的宝石的编号组成一个序列:1,2,3,...,n. 她喜欢两种操作: 1.CUT a b c:他会 ...

  9. Codeforces 1131 (div 2)

    链接:http://codeforces.com/contest/1131 A Sea Battle 利用良心出题人给出的图,不难看出答案为\(2*(h1+h2)+2*max(w1,w2)+4\)由于 ...

  10. ORACLE批量绑定FORALL与BULK COLLECT

    FORALL与BULK COLLECT的使用方法: 1.使用FORALL比FOR效率高,因为前者只切换一次上下文,而后者将是在循环次数一样多个上下文间切换. 2.使用BLUK COLLECT一次取出一 ...