思路

  • 现预处理出每一个点和那些点相邻,状态存入link
  • 再对于选取电脑状态为i(例如i=2,表示选取了第二个电脑),处理出i这个状态能覆盖的所有点存入cover
  • 再进行dp,枚举所有的点的选取状态,为i,再枚举一下i的所有子集为j,如果j能把所有点覆盖,就更新dp[i]=max(dp[i],dp[i^j]+1),i ^ j表示j的补集

代码(转载)

#include <stdio.h>
#include <string.h>
#include <algorithm>using namespace std;
const int N = 1<<17;int n, tmp, dp[N], cover[N], link[N];void init () {int m, k;memset(dp, 0, sizeof(dp));memset(cover, 0, sizeof(cover));memset(link, 0, sizeof(link));tmp = (1<<n);for (int i = 0; i < n; i++) {scanf("%d", &m);link[i] |= (1<<i);for (int j = 0; j < m; j++) {scanf("%d", &k);link[i] |= (1<<k);//link表示的是i这个节点相邻的点有哪些}} for (int i = 0; i < tmp; i++) {for (int j = 0; j < n; j++) if (i & (1<<j)) {//枚举当前选取节点状态为i的时候覆盖了状态为j的节点cover[i] |= link[j];}}
}int solve () {for (int i = 0; i < tmp; i++) {for (int j = i; j; j = (j-1)&i) {//这里j=(j-1)&i取得是i的子集if (cover[j] == tmp-1) {dp[i] = max(dp[i], dp[i^j]+1);//如果已经覆盖完所有的点,就更新dp[i],这里i^j取得是i中j的补集}}}return dp[tmp-1];
}int main () {int cas = 1;while (scanf("%d", &n) == 1 && n) {init();printf("Case %d: %d\n", cas++, solve());}return 0;
}

Hackers' Crackdown相关推荐

  1. Hackers' Crackdown 状压dp

    Hackers' Crackdown 题意:一共有n台电脑,每台电脑有n个服务,每台电脑有它相邻的电脑,我们对于n台电脑后,每台电脑选择一种服务,那么与它相邻的电脑的这种服务都瘫痪,问你最多能使多少种 ...

  2. uva 11825 Hackers' Crackdown

    原题: Miracle Corporations has a number of system services running in a distributed computer system wh ...

  3. UVa 11825 (状压DP) Hackers' Crackdown

    这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的. 题意: 有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服 ...

  4. UVA11825 黑客的攻击 Hackers' Crackdown 状压DP,二进制,子集枚举

    题目链接Click Here [题目描述] 假如你是一个黑客,侵入了一个有着\(n\)台计算机(编号为\(1.2.3....n\))的网络.一共有\(n\)种服务,每台计算机都运行着所有服务.对于每台 ...

  5. UVA11825: Hackers' Crackdown (状压dp)

    题意:有n台计算机,每台有n种服务.每台计算机有m个邻居,停止某台计算某个服务时,它邻居的相应服务也会停止,现在每台计算机可以选择停止其中一项服务,目标是让尽量多的服务停止(所有计算机都停止该服务). ...

  6. UVA11825 Hackers' Crackdown

    题目描述 PDF 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 3 2 1 2 2 0 2 2 0 1 4 1 1 1 0 1 3 1 2 0 输出样例#1: Case 1: 3 ...

  7. UVA 11825 Hackers' Crackdown 状态DP

    题意: 有一个由编号0~n-1的n台计算机组成的网络,一共有n种服务,每台计算机上都运行着全部服务,对于每台计算机,你可以选择停止一项服务,这个行为会导致与这台计算机和与他相连的其他计算机上的这项服务 ...

  8. 【UVA11825】Hackers' Crackdown

    题面 假设你是一个黑客, 侵入了一个有着n台计算机(编号为0,1,-,n-1) 的网络. 一共有n种服务, 每台计算机都运行着所有服务. 对于每台计算机, 你都可以选择一项服务, 终止这台计算机和所有 ...

  9. UVA 11825 Hackers' Crackdown

    题目链接:http://acm.hust.edu.cn/vjudge/problem/18913 题意:假设你是一个黑客,侵入了n台计算机,一共有n种服务,每台计算机都运行着所有的服务.对于每台计算机 ...

最新文章

  1. linux 唯一行数量,linux – 确定bash中具有awk或类似内容的唯一行数
  2. 优质机器学习方面文章
  3. 字符统计2_JAVA
  4. aircv 安装_Python 通过截图匹配原图中的位置(opencv)实例
  5. Netbeans Platform的Lookup -- 边学边记
  6. 如何使用Joyoshare VidiKit Mac版为WMV视频添加字幕?
  7. 物联网|ZETA技术助力远超抄表实现智能化、精细化
  8. 【iOS-Cocos2d游戏开发】解决滚屏背景/拼接地图有黑边(缝隙)
  9. 如何巧妙的申请换部门_职场:如何跟领导提调换工作岗位?这几点你要考虑清楚!...
  10. 智能优化算法:秃鹰搜索算法 -附代码
  11. 在3D城市模型中添加不同的纹理
  12. 图解PKCS#1——第五部分 附录Mask generation functions MGF1
  13. 信息系统安全管理架构
  14. 数学建模——公交调度优化
  15. 【Python】socket编程——使用UDP协议打造在线时间服务器
  16. Centos 6.9 Install dubbokeeper
  17. Prometheus 监控基础
  18. 他打算上计算机课程 英文翻译,计算机专业课程名称英文翻译
  19. 一周信创舆情观察(2.7~2.13)
  20. 高效将PDF转换成Word,迅捷转换器很实用

热门文章

  1. php调用jssdk转发_微信分享调用jssdk实例
  2. Vue项目中ESLint配置(VScode)
  3. 解决arcgis中Lambert conformal conic projection存在的自动变换地理坐标系问题(可自定义为WGS84等任意地理坐标系)
  4. Java SSL - CertificateException: No name matching
  5. 为什么高频信号的指向性更好? Quora上一个很直观的回答
  6. 小鱼易连 for Mac(视频会议软件) V2.24.1.45959官方版
  7. 一文学会Linux安装Mysql5.7(解压方式),加上配置详解,帮你完美避坑
  8. 办公室局域网主机为静态ip时配置路由器由器的方案
  9. 碉堡!Mysql8.0竟然可以直接操作json文档了
  10. SVN版本服务器搭建(服务端+客户端)