题解降智警告

吐槽降智警告

思路降智警告

代码降智警告

题目传送门 洛谷

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

水题做多了降智  --鲁迅


题目大意:见传送门

心路历程见末尾

正解(大概):

状压

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

一种是第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. JS的内存空间

    变量对象与引用数据 概念解释 对于基本数据类型Undefined.Null.Boolean.Number.String往往保存在变量对象中 而对于引用数据类型,如Array.String.Object ...

  2. ubuntu安装virtualbox

    1.下载 2.sudo dpkg -i virtualbox-5.2_5.2.10-122088_Ubuntu_xenial_amd64.deb $sudo dpkg -i virtualbox-5. ...

  3. 自定义Notification实现例子

    1.自定义view: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  4. 今天要查一下,如果没有密保手机的号码在使用,怎么更换qq的密保手机

    本来我是想是使用284来作为foxmail的一个记事本账号,但是需要验证130的手机,这是以前使用的手机,现在不能接受该短信了,得反馈下.

  5. 洛谷 P1328 生活大爆炸版石头剪刀布 —— 模拟

    题目:https://www.luogu.org/problemnew/show/P1328 直接模拟即可. 代码如下: #include<iostream> #include<cs ...

  6. PHP面向对象技术(全面讲解)

    作者:高洛峰    来源:<PHPer>杂志 1.面向对象的概念      面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机 ...

  7. C 的数据类型和基本类型转换方式

    C中的类型分为 整数数据类型 浮点类型 void类型 基本类型符号: 默认数值为十进制,例如:10,20 以0开头的数值为八进制,例如:010,020 以0b开头的数值为二进制,例如:0b0011 以 ...

  8. Rails5 Model Document

    创建: 2017/06/09 更新: 2017/06/21 更新: 2017/06/23 对待未完成的追加# TODO: 更新: 2017/06/29 修正文件名db/seed.rb ---> ...

  9. bzoj 1599: [Usaco2008 Oct]笨重的石子【枚举】

    --我为什么要写这种题解-- 枚举投掷情况即可 #include<iostream> #include<cstdio> using namespace std; int s1, ...

  10. laravel学习一

    Laravel 是一款简洁,优雅的一款框架,可以说是入门TP后的第二款可以选择的框架. 目录部分: app -> 自己写的代码 http -> Controller -> 控制器 b ...