UVA 11825 - Hackers' Crackdown 状态压缩 dp 枚举子集
UVA 11825 - Hackers' Crackdown 状态压缩 dp 枚举子集
ACM
题意:
有一个由编号0~n-1的n台计算机组成的网络,一共同拥有n种服务,每台计算机上都执行着所有服务,对于每台计算机,你能够选择停止一项服务,这个行为会导致与这台计算机和与他相连的其它计算机上的这项服务都停止(原来已经停止的继续保持停止状态)。
求最多能使多少个服务瘫痪(即没有不论什么一台计算机在执行这项服务)。
分析:
题目说白了。就是:
把n个集合p[i],0<=i<n分成尽量多组,使得每组中各个集合的并集为全集。
利用状态压缩。记录每一个节点执行的服务。因为数据大小就16所以直接能够用int范围数字表示一个集合。
然后预处理下cover,处理16个节点组成的各个集合会带来的挺服务效果。
然后dp,假设cover[S0] == all (all全为1) 那么是S^S0 的部分也有可能终止服务 。dp[S] = max(dp[S], dp[S^S0]+1)。
參考了凌乱的心巨巨的题解,嘛。是为了了解枚举子集做的题目。
枚举子集的模板:
// 对于集合Sfor (int S0 = S; S0; S0 = S&(S0 - 1)) // 枚举S0为子集...原理:
S&(S0 - 1)实际上是把S中的0所有忽略。并不断减1的结果。
代码:
/*
* Author: illuz <iilluzen[at]gmail.com>
* File: 11825.cpp
* Create Date: 2014-06-27 20:43:48
* Descripton: sub set/ dp/ numeric
*/ #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int N = 16; int n, m, t, mask[N], cover[1<<N], dp[1<<N], tot; int main() {
int cas = 0;
while (~scanf("%d", &n) && n) {
// input
for (int i = 0; i < n; i++) {
scanf("%d", &m);
mask[i] = (1 << i);
while (m--) {
scanf("%d", &t);
mask[i] |= (1 << t);
}
} // get the union set of cover
for (int S = 0; S < (1 << n); S++) {
cover[S] = 0;
for (int i = 0; i < n; i++) {
if (S & (1 << i)) {
cover[S] |= mask[i];
}
}
} // dp
dp[0] = 0;
tot = (1 << n) - 1;
for (int S = 1; S < (1 << n); S++) {
dp[S] = 0;
for (int S0 = S; S0; S0 = (S0 - 1)&S) {
if (cover[S0] == tot) {
dp[S] = max(dp[S], dp[S^S0] + 1);
}
}
} printf("Case %d: %d\n", ++cas, dp[tot]);
}
return 0;
}
UVA 11825 - Hackers' Crackdown 状态压缩 dp 枚举子集的更多相关文章
- P5911 [POI2004]PRZ (状态压缩dp+枚举子集)
题目背景 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 题目描述 桥已经很旧了, 所以它不能承受太重的东西.任何时候队伍在桥上的人都不能超过一定的限制. 所以这只队伍过桥时 ...
- uva 11825 Hackers' Crackdown (状压dp,子集枚举)
题目链接:uva 11825 题意: 你是一个黑客,侵入了n台计算机(每台计算机有同样的n种服务),对每台计算机,你能够选择终止一项服务,则他与其相邻的这项服务都终止.你的目标是让很多其它的服务瘫痪( ...
- UVA 11825 Hackers’ Crackdown 状压DP枚举子集势
Hackers’ Crackdown Miracle Corporations has a number of system services running in a distributed com ...
- uva 10817 - Headmaster's Headache ( 状态压缩dp)
本文出自 http://blog.csdn.net/shuangde800 题目链接: 点击打开链接 题目大意 某校有n个教师和m个求职者,已知每人的工资和能教的课程集合,要求支付最少的工资使得每 ...
- hoj2662 状态压缩dp
Pieces Assignment My Tags (Edit) Source : zhouguyue Time limit : 1 sec Memory limit : 64 M S ...
- POJ 3254 Corn Fields(状态压缩DP)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4739 Accepted: 2506 Descr ...
- [知识点]状态压缩DP
// 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...
- HDU-4529 郑厂长系列故事——N骑士问题 状态压缩DP
题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种. 分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快, ...
- DP大作战—状态压缩dp
题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...
随机推荐
- poj 2288 Islands and Bridges (状压dp+Tsp问题)
这道题千辛万苦啊! 这道题要涉及到当前点和前面两个点,那就设dp[state][i][j]为当前状态为state,当前点为i,前一个点为j 这个状态表示和之前做炮兵那题很像,就是涉及到三个点时,就多设 ...
- 原生ajax的请求过程
原生ajax的请求过程 创建全平台兼容的XMLHttpRequest对象: function getXHR(){ var xhr = null; if(window.XMLHttpRequest) { ...
- [terry笔记]GoldenGate_迁移同步_主库零停机
ogg根据scn同步数据,源库零停机时间 本次实验与上次的区别:更加注重细节,几乎包含所有步骤,把我越到的坑都作出了说明.并且同步是由10g向11g进行同步,更加符合升级迁移需求. 如下是主要步骤: ...
- 2015 Multi-University Training Contest 8 hdu 5390 tree
tree Time Limit: 8000ms Memory Limit: 262144KB This problem will be judged on HDU. Original ID: 5390 ...
- 洛谷 P2700 逐个击破
P2700 逐个击破 题目背景 三大战役的平津战场上,傅作义集团在以北平.天津为中心,东起唐山西至张家口的铁路线上摆起子一字长蛇阵,并企图在溃败时从海上南逃或向西逃窜.为了就地歼敌不让其逃走,毛主席制 ...
- [using_microsoft_infopath_2010]Chapter2 表单需求,使用表决矩阵
本章概要 1.从模板创建表单 2.从创建表单收集需求 3.使用全部表单决策 4.决定需要创建哪种表单
- Firefox OS简单介绍
Firefox OS系统架构框图 一些Firefox相关的术语简单介绍: B2G Boot to Gecko 的简称. Boot to Gecko Firefox OS 操作系统的project代号. ...
- [React] Integration test a React component that consumes a Render Prop
In this lesson, I use Enzyme and Jest's Snapshot functionality to write an integration test for a co ...
- 初识Dubbo 系列之5-Dubbo 成熟度
成熟度 功能成熟度 Feature特征 Maturity成熟度 Strength强度 Problem问题 Advise建议 User用户 并发控制 Tested 并发控制 试用 连接控制 Te ...
- Java类载入器
1. 系统载入器简单介绍 Java虚拟机中能够安装多个类载入器,系统默认三个主要类载入器(BootStrap.ExtClassLoader.AppClassLoader).每一个类载入器负责载入特 ...