UVA 11825 Hackers' Crackdown dp+位运算状态压缩(子集枚举)

uva 11825 Hackers' Crackdown(动态规划-状态压缩DP) uva 11825 Hackers' Crackdown(状态压缩DP) 题目大意: 有n台计算机,每台计算机运行n个不同进程,现在你可以每台机器上停止一个服务,而且你停止了1台机器上的这个服务的同时,其相连机器上的这个服务也会停止,再告诉 你每台机器相连的机器,当一个所有机器上的这个服务都停止了,那么这个服务才算没有被运行,问你最多多少个服务没有 被运行? 解题思路: 其实就是把这些机器分成最多的子集合集合,每个子集合合并起来能够影响全部,这样就能解决问题。这样枚举的状态就是2^16次方。 阅读详情

题意:

      有N台电脑(编号为0,1,2......n-1),每台电脑有N(N<=16)个服务,一个黑客可以在每台电脑上种植让其中一种服务崩溃的病毒,并且这个病毒可以传播到跟他邻接的电脑,问最多这个黑客可以让多少个服务崩溃?(每台电脑上都是N个不同服务,每台电脑上跑的都是一样的服务,让一个服务崩溃是让所有的电脑上的这个服务崩溃)

Input

There will be multiple test cases in the input file. A test case begins with an integer N (1 ≤ N ≤ 16),the number of nodes in the network. The nodes are denoted by 0 to N − 1. Each of the followingN lines describes the neighbors of a node. Line i (0 ≤ i < N) represents the description of node i.The description for node i starts with an integer m (Number of neighbors for node i), followed by mintegers in the range of 0 to N − 1, each denoting a neighboring node of node i.

The end of input will be denoted by a case with N = 0. This case should not be processed.

Output

For each test case, print a line in the format, ‘Case X: Y ’, where X is the case number & Y is themaximum possible number of services that can be damaged.

Sample Input

3

2 1 2

2 0 2

2 0 1

4

1 1

1 0

1 3

1 2

0

Sample Output

Case 1: 3

Case 2: 2

 分析:

本题的数学模型:

把n个集合p1,p2,p3...pn分成尽量多组,并且使得每一组集合的并集等于全集S。

f[s]表示集合至多能分成几组,

注意到n<=16,于是每台电脑与其他电脑的关系,也就是前面说的p1,p2...pn,可以用一个二进制数来表示:

相邻的为1,不相邻的为0,全集全为1;

方程:

f(s)= max{f(s-S0) | S0是s的子集,并且crash[S0]==全集S}+1;

其中,crach[S]表示集合S关系到的所有的p[i]的并集(用位运算的'|‘来表达)。

时间的复杂度等于{1,2,3......n}的所有子集的子集的个数。总之用很牛逼的方法可以知道,它是O(3^n)。

代码如下:

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=16;
int n,f[(1<<maxn)+5],crash[(1<<maxn)+5],p[maxn];
void input(){
	int i,s,m,x;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d",&m);
		p[i]= 1<<i; //最初只有自己 
		while(m--){
			scanf("%d",&x);
			p[i]|=(1<<x);  
		}
	}
	memset(crash,0,sizeof(crash));
	for(s=0;s<(1<<n);s++){  //预处理crash[s]; 
		crash[s]=0;
		for(i=0;i<n;i++)
			if(s&(1<<i))crash[s]|=p[i];  //并集操作 
	} 
}
void solve(int kase){
	int all= (1<<n)-1,s,s0;
	for(s=1;s<(1<<n);s++){
		f[s]=0;  //多组数据。不要忘了初值 
			for(s0=s;s0;s0=(s0-1)&s)  //枚举s的子集s0; 
				if(crash[s0]==all)
					f[s]=max(f[s],f[s-s0]+1); //也可写成f[s^s0]+1; 
	}
	printf("Case %d: %d\n",kase,f[all]);
}
int main(){
	for(int i=1;;i++){
		input();
		if(n==0)return 0;
		solve(i);
	}
}
/* 
枚举子集的模型:
对于集合s:
for(s0=s;s0;s0=(s0-1)&s)
*/ 


(王道计算机组成原理笔记)第一章计算机系统概述-第二节:计算机系统层次结构 1(计算机系统组成、计算机硬件) 文章目录一:冯诺依曼体系结构(1)存储程序计算机(2)层次结构二:计算机硬件概述(1)存储器A:存储元、存储单元、存储体、存储字和存储字长B:MAR 一:冯诺依曼体系结构 在冯诺依曼体系结构中,计算机的硬件主要有**存储器,运算器,控制器,输入和输出设备(也叫做I/O设备)**组成。 (1)存储程序计算机 冯诺依曼体系结构也叫做存储程序计算机,计算器和计算机的唯一区别就是计算器是不能编程的,只能做电路板中设定好的固定的运算。 这也就意味着计算器本质就是一个不能编程的计算机,其在硬件层面已经将逻辑写死,如果 阅读详情

相关推荐

自制电吉他效果器 DIY PCB(二)电路图分析

自制DIY电吉他效果器 PCB(二)电路图分析 要自制一款效果器,看懂电路图是必须的,即使你已经有了完整的设计电路图,在电路的绘制已久焊接的时候电路知识都会用到。 在效果器电路中,比较简单的是过载失真类效果器的电路。混响延迟等与声相有关的由于电路比较复杂本人也没有尝试过。其他的例如EQ、哇音等等效果器复杂程度依设计各不相同,在能做出过载失真类效果器后,可以自行尝试。 我这里主要为大家介绍失真效果器...

qq_41342525的博客 2万+

二进制状态压缩枚举子集

对于二进制状态 SSS,可以用此方法不重不漏地枚举出子状态: for (int sub = S; sub; sub = (sub - 1) & S) { // sub 为 S 的子集 } 【证明】 由 sub=(sub−1)∩Ssub = (sub - 1) \cap Ssub=(sub−1)∩S 可知 subsubsub 每次必然会变小,于是我们只需要证明区间 ((sub−1)∩S,sub)\left((sub - 1) \cap S, sub\right)((sub−1)∩S,sub) 中不

ixRic 2188

告别QWebEngineView!用QtLocation+SQLite打造离线地图应用(附完整源码)

本文详细介绍了如何利用QtLocation模块与SQLite数据库构建高性能离线地图引擎,解决传统QWebEngineView方案在网络依赖、内存占用和定制化方面的不足。通过多级缓存机制、异步写入优化和纹理压缩技术,实现工业级应用的稳定运行和高效渲染,特别适合车载导航和野外勘探等场景。

weixin_30431445的博客 362

UVA 1508 - Equipment 状态压缩 枚举子集 dfs

UVA 1508 - Equipment 状态压缩 枚举子集 dfs ACM 题目地址:UVA 1508 - Equipment--PDF 题意:  给出n个5元组,从中选出k组,使得这些组中5个位置,每个位置上最大数之和最大。 分析:  想了好久...最后还是参考了别人的题解...  不过思路很棒,值得学习。 由于n的范围为1,10000,所以从n考虑是很难解

水果君の日常 2311

【无人机设计与控制】基于PID控制的四旋翼无人机系统Matlab仿真

本文设计并仿真了基于PID控制的四旋翼无人机系统。首先,建立了四旋翼无人机的数学模型,涵盖了无人机的动力学和控制系统。通过PID控制器对四旋翼的姿态和位置进行控制,以实现其稳定飞行。使用MATLAB/Simulink对该系统进行仿真,验证了PID控制算法在四旋翼控制中的有效性。仿真结果表明,PID控制能够较好地调节四旋翼的飞行姿态,并有效抑制外部干扰,使得无人机能够保持平稳飞行。

2401_84610415的博客 1804

【Clickhouse】Cannot allocate block number in Zookeeper write prefix view location

我有一个问题,我CK集群跑批的时候,replicated表变成只读的了下面是CK的报错和当时ZK的日志。下面是zk报错开始 我认为是写入的时候,压力太大,ZK扛不住了,就按照博客里的建议优化了ZK的参数,现在偶尔还会只读,zk报错都是图里的那种clickhouse的集群是5分片的集群,数据量比较大。每小时批量一次,每次2-10W条数据,字段的话,不到200个字段,使用的 jdbc sink写入。

九师兄 836

UVA - 11825 Hackers' Crackdown 状态压缩dp+枚举子集 个人理解和做法

链接: https://vjudge.net/problem/UVA-11825 题意: 一个黑客入侵有n台计算机的网络,一共有n种服务,每台计算机运行着所有的服务。对于每一台计算机你都可以选择任何一项服务使得这台计算机以及其链接的计算机停止运行该项服务,假如有一项服务没有被任何计算机运行,那么则称:该服务瘫痪。 求: 服务瘫痪个数的最大值 一开始觉得计算机链接应该是双向的吧(事实证明...

forOnward的博客 364

【Bug已解决】Codex App returns 401 Missing bearer/basic authentication after login on multiple Windows la

原始报错:Codex App returns 401 Missing bearer/basic authentication after login on multiple Windows laptops场景:用户在 Windows 笔记本上登录应用成功了,但随后每个业务请求都返回 401,提示"Missing bearer/basic authentication"。登录态像是"假的"——明明登了,请求却没带任何认证信息。多台 Windows 设备都能复现。

一键难忘的博客 593

uva 11825 - Hackers' Crackdown dp

题意   有n个节点,每个节点有m_i个邻居,每个人和邻居为一个整体,问最多可以分成几组使得每组并集合为全集 转移方程 复杂度 3^n /* author:jxy lang:C/C++ university:China,Xidian University **If you need to reprint,please indicate the source** */ #include

弱弱的jxy 1554

Qt C++ + Qt 3D 的数字孪生工厂

以下是一个基于 **Qt C++ + Qt 3D** 的数字孪生工厂完整源码示例,集成了 **Qt 3D** 产线建模和 **WebSocket** 实时数据交互。ui->qualifiedProductsLabel->setText(QString("合格产品: %1").arg(data.qualifiedProducts));ui->totalProductsLabel->setText(QString("总产量: %1").arg(data.totalProducts));

寒寒豆豆软件公司的博客 149

关键!C#工业上位机界面设计终极指南:WinForm/WPF怎么选?【工业实战完整版,无废话选型+避坑+落地技巧】

工业上位机UI选型指南:WinForm与WPF核心对比 摘要: 本文基于工业实战视角,对比WinForm与WPF在工业上位机开发中的适用性。WinForm凭借GDI+原生渲染、极致兼容性(完美支持Win7/XP)、低资源占用和硬件底层调用优势,成为老旧工控机、简单监控系统和7×24小时运行设备的首选。WPF则依托DirectX硬件加速、MVVM架构和强大可视化能力,更适合复杂可视化大屏、3D模拟等高端场景及需要长期迭代的大型项目。核心选型原则是:优先考虑稳定性与兼容性,WinForm解决"能不能用

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 727

UVA - 11825 ——Hackers' Crackdown (状压DP)

题目链接:https://vjudge.net/problem/UVA-11825 思路:每个电脑与它相邻的电脑都看成一个集合,求包含所有电脑的最多集合 dp[s]=max(dp[s],dp[s^s0]+1) s0能形成一个全集的情况下 #include<string.h> #include<stdio.h> #include<algor...

creator平 288

Parasoft C++Test软件单元测试_操作指南

本文主要为使用C++TEST进行单元测试的流程性操作讲解,后续文章将以专题形式进行详细讲解,以及用一些被测函数作为示例进行实例讲解。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1574

UVA 11825 Hackers' Crackdown 状态压缩dp

参考: 刘汝佳大白书p69-p70 #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; //LOOP #define FE

冰 1007

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Hackers' Crackdown UVA - 11825

问题 https://vjudge.net/problem/UVA-11825 分析 就是n台计算机上运行这n种服务,每个计算机都可以选择一种服务,使得它和相邻计算机上的这种服务停止,问也最多能够停止多少种服务。 贪心+状态压缩 #include <iostream> #include <cstdio> #include <cmath> #include &lt...

zpf1998的博客 234

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

UVA 11825 - Hackers' Crackdown 状态压缩 dp 枚举子集

11825 - Hackers' Crackdown 状态压缩 dp 枚举子集 ACM 题目地址:11825 - Hackers' Crackdown 题意:  有一个由编号0~n-1的n台计算机组成的网络,一共有n种服务,每台计算机上都运行着全部服务,对于每台计算机,你可以选择停止一项服务,这个行为会导致与这台计算机和与他相连的其他计算机上的这项服务都停止(原来已经停止的继续

水果君の日常 2105

uva 11825 - Hackers' Crackdown

题目:uva 11825 - Hackers' Crackdown 思路:状态压缩 #include #include #include #include #include #include using namespace std; #define maxn ((1<<16)+1) int p[20]; int covers[maxn]; int dp[maxn]; i

shiyuan的专栏 1365

[UVA11825]Hackers' Crackdown(状压dp)

题解降智警告 吐槽降智警告 思路降智警告 代码降智警告 题目传送门洛谷 果然水题做多了连半道难点的都能给咱干蒙... 水题做多了降智--鲁迅 题目大意:见传送门 心路历程见末尾 正解(大概): 状压 虽然有些难以理解,但是这道题里面有两种集合 一种是第i台电脑所联通的合起来就是S[i](代码内的line[i]) 另一种是指已经用了哪几台电脑 思路开...

weixin_34235105的博客 146

UVA 11825 Hackers' Crackdown

有n台电脑,每台电脑都运行着n个服务,破坏一个服务,要破坏掉每台电脑上的这个服务,一个黑客想要破坏尽量多到服务,他有一些病毒,每台电脑只能放一个病毒,并且能破坏这个电脑和这个电脑相邻电脑的这个服务. 由于n比较小,可以用二进制来压缩状态,设P[i]为第i电脑能够连起来的电脑的二进制表示,然后枚举P的子集(每个子集里的元素的服务全部被破坏),结果存在cover里. 然后再次枚举子集,用dp[s]

蚂蚁大战大象 561

Uva - 11825 - Hackers' Crackdown(状态压缩dp)

题意:全集为0, 1, 2, ..., N-1,输入N个子集,求这N个子集最多能分成多少组,使得每组的并集都是全集。 题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=226&page=show_problem&problem=2925 ——>>设f[S]为集合S的最大拆分组数。

无节操 1504

UVa 11825 Hackers' Crackdown (状态压缩DP)

UVa 11825 Hackers’ Crackdown题目大意:侵入n台计算机,每台计算机有m个相邻计算机.对于一台计算机,可以选择终止其一种服务,相邻计算机也会受到影响停止该种服务,问最多能有多少种服务完全瘫痪(也就是说要让所有计算机均停止该种服务).题目分析:一台计算机只能终止一种服务,若用P[i]表示i号计算机的相邻计算机集合(包括i号计算机本身),那么实质上问题就是在每一组的P的并集为全集

Continue 425

UVA 11825 Hackers' Crackdown DP+状态压缩 -

题目地址:http://vjudge.net/problem/UVA-11825 题目难在怎么转化 因为题目求的是完全瘫痪,也就是所有的计算机都没有运行 将一个计算机及其相邻的计算机表示成集合A,如第一行的 2 1 2,表示为111 为了使所有的计算机都没有运行,就是求A这种集合任意组合能使 他们交集全为1,如A1=000111,A2=111000,A3=001100,那么000~111总

BRCOCOLI的博客 276

UVA11825 Hackers' Crackdown

状压DP,枚举子集

ACoder 264

Uva 11825 Hackers' Crackdown ACM解题报告(状压dp)

这题的题意是有n个电脑,每个电脑都有n个服务,然后每台电脑都和某几台电脑相邻,有个黑客可以在每台电脑上停止一个服务,然后这台电脑和与它相邻的电脑上的这个服务都会停止,问最多可以停止多少个服务。 这题就是要把电脑之间的关系化成集合,因为n的范围比较小,所以可以状态压缩,用(1 状态转移时f[s]=max(f[s-s0])+1,s0是s的子集,cover[s0]=全集。 #include #in

Miracle_ma的专栏 697

uva11825Hackers' Crackdown

链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18913 题意:《算法竞赛入门经典训练指南》算法设计基础例题29。 分析:刘汝佳讲得很好了,我就不bb了。需要学习的姿势是二进制集合子集的遍历。剩下就是状态压缩了。O(3^n) 代码: #include #include #include #include #in

Fsss 452

uva_11825_Hackers' Crackdown (狀態壓縮DP,好題)

分析: 這個題目的數學模型是,把集合p1, p2, p3, ..., pn分儘量多組,使得每組的並集等於S全集,其中pi表示i於i相鄰的頂點組成的集合,每組等於一個服務 把一個集合表示二進制的形式,狀態f[i]表示i所表示的集合最多分成多少組 f[i] = max(f[j]| j的並集等於S)+1 Code: #include #include #include #include #inc

unixcsir的专栏 477
上一篇: UVA 11136 Hoax or what 促销活动
下一篇: 奶牛xor--nkoi1873
INCINCIBLE
博客等级 码龄11年 31粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值