[UVA11825]Hackers' Crackdown(状压dp)
题解降智警告
吐槽降智警告
思路降智警告
代码降智警告
题目传送门 洛谷
果然水题做多了连半道难点的都能给咱干蒙...
水题做多了降智 --鲁迅
题目大意:见传送门
心路历程见末尾
正解(大概):
状压
虽然有些难以理解,但是这道题里面有两种集合
一种是第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)的更多相关文章
- UVa 11825 Hackers' Crackdown (状压DP)
题意:给定 n 个计算机的一个关系图,你可以停止每台计算机的一项服务,并且和该计算机相邻的计算机也会终止,问你最多能终止多少服务. 析:这个题意思就是说把 n 台计算机尽可能多的分成一些组,使得每组的 ...
- UVA11825 黑客的攻击 Hackers' Crackdown 状压DP,二进制,子集枚举
题目链接Click Here [题目描述] 假如你是一个黑客,侵入了一个有着\(n\)台计算机(编号为\(1.2.3....n\))的网络.一共有\(n\)种服务,每台计算机都运行着所有服务.对于每台 ...
- UVA 11825 Hackers’ Crackdown 状压DP枚举子集势
Hackers’ Crackdown Miracle Corporations has a number of system services running in a distributed com ...
- UVa 11825 (状压DP) Hackers' Crackdown
这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的. 题意: 有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服 ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- 【BZOJ2073】[POI2004]PRZ 状压DP
[BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
随机推荐
- ATM网络
ATM是Asynchronous Transfer Mode(ATM)异步传输模式的缩写,是实现B-ISDN的业务的核心技术之一.ATM是以信元为基础的一种分组交换和复用技术
- YTU 2629: E1 一种颜色,三个分量
2629: E1 一种颜色,三个分量 时间限制: 1 Sec 内存限制: 128 MB 提交: 300 解决: 226 题目描述 在计算机中,常用三种基色红(R).绿(G).蓝(B)的混合来表示颜 ...
- cordova常用命令
安装 cordova: npm install -g cordova 创建应用程序 cordova create hello com.example.hello HelloWorld 添加平台 cor ...
- JeePlus:代码生成器
ylbtech-JeePlus:代码生成器 1.返回顶部 1. 代码生成器Jeeplus代码生成器可以快速提高你的开发效率代码生成器可以0编码快速开发,通过配置生成数据库,mapper,service ...
- bzoj 1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富【记忆化搜索+剪枝】
c[x][y]为从(x,y)到(n,m)的最大值,记忆化一下 有个剪枝是因为y只能+1所以当n-x>m-y时就算x也一直+1也是走不到(n,m)的,直接返回0即可 #include<ios ...
- SAP中的货币与金额
- LOJ#510. 「LibreOJ NOI Round #1」北校门外的回忆(线段树)
题面 传送门 题解 感谢\(@M\_sea\)的代码我总算看懂题解了-- 这个操作的本质就是每次把\(x\)的\(k\)进制最低位乘\(2\)并进位,根据基本同余芝士如果\(k\)是奇数那么最低位永远 ...
- [SDOI2013]泉
题目描述 作为光荣的济南泉历史研究小组中的一员,铭铭收集了历史上x个不同年份时不同泉区的水流指数,这个指数是一个小于. 2^30的非负整数.第i个年份时六个泉区的泉水流量指数分别为 A(i,l),A( ...
- 题解报告:poj 3468 A Simple Problem with Integers(线段树区间修改+lazy懒标记or树状数组)
Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...
- ACM_物品分堆(01背包)
物品分堆 Time Limit: 2000/1000ms (Java/Others) Problem Description: 有n个物品,物品i的重量为Wi,现在想要把这个n个物品分类两堆,求最小的 ...