题解降智警告

吐槽降智警告

思路降智警告

代码降智警告

题目传送门 洛谷

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

水题做多了降智  --鲁迅


题目大意:见传送门

心路历程见末尾

正解(大概):

状压

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

一种是第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. YTU 2509: 奇怪的分式

    2509: 奇怪的分式 时间限制: 1 Sec  内存限制: 128 MB 提交: 113  解决: 48 题目描述 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是:   1/4 乘以 8 ...

  2. iOS开发-多台机器共用证书问题

    今天又被证书的问题卡壳了: 在公司的电脑上申请的开发.发布证书,回家用自己的电脑从苹果开发者中心上将证书和配置文件都下载下来提示用不了,弄了很久才想起.p12文件,必须从申请证书的电脑上导出,导入到自 ...

  3. Tensorflow学习笔记——张量、图、常量、变量(一)

    1 张量和图 TensorFlow是一种采用数据流图(data flow graphs),用于数值计算的开源软件库.其中 Tensor 代表传递的数据为张量(多维数组),Flow 代表使用计算图进行运 ...

  4. Flask开启多线程、多进程

    一.参数 app.run()中可以接受两个参数,分别是threaded和processes,用于开启线程支持和进程支持. 二.参数说明 1.threaded : 多线程支持,默认为False,即不开启 ...

  5. Navicat for MySQL 激活方法

    Navicat for MySQL 激活方法: 首先下载 PatchNavicat.exe ,不知道在哪儿下的可以直接拿走: 链接:https://pan.baidu.com/s/1yy4M8IDx8 ...

  6. Python 之reduce()函数

    reduce()函数: reduce()函数也是Python内置的一个高阶函数.reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce() ...

  7. window系统 查看端口 被哪个进程占用了

    一.在windows命令行窗口下执行:运行--cmdC:\>netstat -aon|findstr "8080" TCP     127.0.0.1:80       0. ...

  8. libnids 显示UDP数据报,编译,运行,正确。

    #include<stdio.h>#include<nids.h>#include<string.h>#include <sys/socket.h>#i ...

  9. VS2015 razor 提示一闪而过

    出现的问题链接地址 https://social.microsoft.com/Forums/azure/zh-CN/ff308f71-c743-4f8c-b5e4-a7260c8b5f59/vs201 ...

  10. 【WIP_S3】链表

    创建: 2017/12/26 完成: 2018/01/14   [TODO]     S4, S5, S14来处理动态数组   CAF8A81B790F [github 地址]传送门  链表的定义   ...