题解降智警告

吐槽降智警告

思路降智警告

代码降智警告

题目传送门 洛谷

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

水题做多了降智  --鲁迅


题目大意:见传送门

心路历程见末尾

正解(大概):

状压

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

一种是第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. ios23--动画做弹出提示框toast

    ) { /* [UIView animateWithDuration:2.0 animations:^{ // 执行动画 self.showHUB.text = @"当前购物车已空,赶紧买买 ...

  2. Centos7 防火墙firewalld配置

    开启80端口 firewall-cmd --zone=public --add-port=80/tcp --permanent  出现success表明添加成功 移除某个端口 firewall-cmd ...

  3. Eclipse 工程配置与目录结构及各种文件夹(常用插件)

    .classpath..project 是 Eclipse 工程所必须的文件. OpenExplorer: 该 jar 包的下载地址:samsonw/OpenExplorer 安装配置方法:eclip ...

  4. 洛谷P1365 WJMZBMR打osu! / Easy——期望DP

    题目:https://www.luogu.org/problemnew/show/P1365 平方和怎样递推? 其实就是 (x+1)^2 = x^2 + 2*x + 1: 所以我们要关注这里的 x — ...

  5. E20171230-hm

    refine   vt. 提炼; 改善; 使高雅; revert  vi. 恢复; 重提; 回到…上; <律>归还;             vt. 使恢复原状;            n ...

  6. git分支的理解

    分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...

  7. python 中 str与bytes的转换

    # bytes转字符串方式一 b=b'\xe9\x80\x86\xe7\x81\xab' string=str(b,'utf-8') print(string) # bytes转字符串方式二 b=b' ...

  8. web api 二

    接着上一回说,上回说到,web api有几种访问方式,具体有几种,我还真没去研究过,但是这里打算从get.post.put.delete四种请求方式分别谈谈基础类型(包括int/string/date ...

  9. 添加telnet命令

    打开控制面板,打开程序和功能,看到左边有个“打开或关闭Windows功能 ,打开找到telnet客户端,把这2项都勾选上,然后确定就可以了 注意,如果只要telnet别人的话,就选telnet客户端. ...

  10. 第2章 JavaScript语法

    1.最好的做法是把<script>标签放到html文档的最后,</body>标签之前. 举例: ...... <script src="file.js" ...