[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 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
随机推荐
- luogu2540 斗地主增强版
题目大意 给你一副手牌,没有飞机带翅膀,按斗地主的规则,求将所有牌打出的最少次数. 题解 先不考虑顺子 我们已经知道花色对牌没有影响,那么如果不考虑顺子,每个牌具体是什么数字我们也用不着知道,我们关心 ...
- javax.servlet.http.Part 文件上传
编辑jsp页面: <html> <head> <base href="<%=basePath%>"> <title>My ...
- Android源码的下载、编译与导入到Android Studio【转】
本文转载自:http://wl9739.github.io/2016/05/09/Android%E6%BA%90%E7%A0%81%E7%9A%84%E4%B8%8B%E8%BD%BD%E3%80% ...
- mongodb AND查询遇到多个index时候可能会做交集——和复合索引不同
关于MongoDB中索引文档的一个问题? - To illustrate index intersection, consider a collection orders that has the f ...
- Size Classes with Xcode 6:为所有的尺寸准备一个Storyboard
我最喜欢的Xcode6的特性是新的size classes 概念,有了它,我们解决了“我如何能够快速的为那么多不同尺寸屏幕以及方向的设备写app”.他们也让在一个storyboard中创建一个通用的a ...
- Cocos2d-x 3.2编译生成Android程序出错Error running command, return code: 2的解决方法
用Cocos2d-x 3.2正式版创建项目,结果使用cocos compile -p android编译生成APK程序,结果悲剧了,出现以下错误. Android NDK: Invalid APP_S ...
- 阿里Java开发规约笔记
借助阿里开发规约,回顾一下Java开发编码基础方面的知识,结合自己使用中遇到的问题,记录一下规约中以前翻过的错.有共鸣的问题. 1.覆写方法时要加上@Override注解.重写一个类型T的equals ...
- springboot(三)配置日志
github代码:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-serviceSLF ...
- python中多线程(1)
一多线程的概念介绍 threading模块介绍 threading模块和multiprocessing模块在使用层面,有很大的相似性. 二.开启多线程的两种方式 1.创建线程的开销比创建进程的开销小, ...
- 士兵杀敌 三 --- O( 1 ) 的时间复杂度 .
一看就是 十分简单的 题 , 然后上去开始无脑程序 超时~~~ 感觉时间复杂度 , 已经很低了 , 但是并没有什么卵用 . #include<stdio.h> #in ...