[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 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
随机推荐
- ios23--动画做弹出提示框toast
) { /* [UIView animateWithDuration:2.0 animations:^{ // 执行动画 self.showHUB.text = @"当前购物车已空,赶紧买买 ...
- Centos7 防火墙firewalld配置
开启80端口 firewall-cmd --zone=public --add-port=80/tcp --permanent 出现success表明添加成功 移除某个端口 firewall-cmd ...
- Eclipse 工程配置与目录结构及各种文件夹(常用插件)
.classpath..project 是 Eclipse 工程所必须的文件. OpenExplorer: 该 jar 包的下载地址:samsonw/OpenExplorer 安装配置方法:eclip ...
- 洛谷P1365 WJMZBMR打osu! / Easy——期望DP
题目:https://www.luogu.org/problemnew/show/P1365 平方和怎样递推? 其实就是 (x+1)^2 = x^2 + 2*x + 1: 所以我们要关注这里的 x — ...
- E20171230-hm
refine vt. 提炼; 改善; 使高雅; revert vi. 恢复; 重提; 回到…上; <律>归还; vt. 使恢复原状; n ...
- git分支的理解
分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...
- python 中 str与bytes的转换
# bytes转字符串方式一 b=b'\xe9\x80\x86\xe7\x81\xab' string=str(b,'utf-8') print(string) # bytes转字符串方式二 b=b' ...
- web api 二
接着上一回说,上回说到,web api有几种访问方式,具体有几种,我还真没去研究过,但是这里打算从get.post.put.delete四种请求方式分别谈谈基础类型(包括int/string/date ...
- 添加telnet命令
打开控制面板,打开程序和功能,看到左边有个“打开或关闭Windows功能 ,打开找到telnet客户端,把这2项都勾选上,然后确定就可以了 注意,如果只要telnet别人的话,就选telnet客户端. ...
- 第2章 JavaScript语法
1.最好的做法是把<script>标签放到html文档的最后,</body>标签之前. 举例: ...... <script src="file.js" ...