UVA 11825 Hackers' Crackdown

题目

Miracle Corporations has a number of system services running in a distributed computer system which
is a prime target for hackers. The system is basically a set of N computer nodes with each of them
running a set of N services. Note that, the set of services running on every node is same everywhere
in the network. A hacker can destroy a service by running a specialized exploit for that service in all
the nodes.
One day, a smart hacker collects necessary exploits for all these N services and launches an attack
on the system. He finds a security hole that gives him just enough time to run a single exploit in each
computer. These exploits have the characteristic that, its successfully infects the computer where it
was originally run and all the neighbor computers of that node.
Given a network description, find the maximum number of services that the hacker can damage.
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 following
N 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 m
integers 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 the
maximum 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台服务器,每个服务器上运行n个服务,有个黑客想去毁掉尽可能多的服务,黑客只能在每台服务器上毁掉某一个服务,同时和这台服务器直接相连的服务器的这个服务也会被毁掉,某个服务要在每个服务器上都毁掉了才算毁掉了,求最多能毁掉的服务。

解法

用i表示服务器的一个状态,i的二进制下某位是1表示黑客在这台服务器上毁掉了某个服务,0则没有,设f[i]=1表示i这个状态能毁掉一个服务,0则表示不行,然后还要排除一些多余的,比如f[101]是1,那么f[111]肯定是1了,但是既然能用少量的肯定会有少量的,所以f[111]是不应该被用到的,应该置为0。最后设dp[i]表示状态为i时的最大值,就有
if(f[j]==1&&(i&j)==j)
dp[i]=max(dp[i],1+dp[i^p[j]]);
答案就是dp[1<<n];

代码

#include<cstdio>
#include<cstring>
int a[20][20],cnt[20],f[70000],vis[20],dp[70000],p[70000],cn;
int max(int a,int b)
{
	return a>b?a:b;
}
int main()
{
	int n,i,j,cas=1;
	while(scanf("%d",&n)&&n)
	{
		for(i=0;i<n;i++)
		{
			scanf("%d",&cnt[i]);
			for(j=0;j<cnt[i];j++)
			{
				scanf("%d",&a[i][j]);
			}
		}
		int lim=(1<<n);
		memset(f,0,sizeof(f));
		f[0]=0;
		for(i=1;i<lim;i++)
		{
			memset(vis,0,sizeof(vis));
			int tmp=i,pos=0;
			while(tmp)
			{
				if(tmp&1)
				{
					vis[pos]=1;
					for(j=0;j<cnt[pos];j++)
						vis[a[pos][j]]=1;
				}	
				tmp=tmp>>1;
				pos++;
			}	
			for(j=0;j<n;j++)
				if(vis[j]==0)
					break;
			if(j==n)
				f[i]=1;
		}
		cn=0;
		for(i=1;i<lim;i++)
		{
			if(f[i]==0)
				continue;
			p[cn++]=i;
			for(j=i+1;j<lim;j++)
			{
				if((j&i)==i)
				{
					f[j]=0;
				}
			}
		}
		memset(dp,0,sizeof(dp));
		for(i=1;i<lim;i++)
		{
			for(j=0;j<cn;j++)
			{
				if((i&p[j])==p[j])
				{
					dp[i]=max(dp[i],1+dp[i^p[j]]);
				}
			}	
		}
		printf("Case %d: %d\n",cas++,dp[lim-1]);
	}
	return 0;
}



标题基于Spring Boot的音乐播放网站设计与实现研究AI更换标题第1章引言介绍音乐播放网站的研究背景、意义、国内外现状及论文方法与创新点。1.1研究背景与意义阐述音乐播放网站在当今数字化时代的重要性与市场需求。1.2国内外研究现状分析国内外音乐播放网站的发展现状及技术特点。1.3研究方法以及创新点概述论文采用的研究方法及在设计与实现上的创新点。第2章相关理论与技术基础总结音乐播放网站设计与实现所需的相关理论和技术。2.1Spring Boot框架介绍介绍Spring Boot框架的基本原理、特点及其在Web开发中的应用。2.2音乐播放技术概述概述音乐播放的基本原理、流媒体技术及音频处理技术。2.3数据库技术选型分析适合音乐播放网站的数据库技术,如MySQL、MongoDB等。第3章系统设计详细介绍音乐播放网站的整体设计方案。3.1系统架构设计阐述系统的层次结构、模块划分及各模块的功能。3.2数据库设计介绍数据库表结构、关系及数据存储方式。3.3界面设计用户界面的设计原则、布局及交互方式。第4章系统实现详细介绍音乐播放网站的具体实现过程。4.1开发环境与工具介绍开发所需的软件、硬件环境及开发工具。4.2核心功能实现阐述音乐播放、搜索、推荐等核心功能的实现细节。4.3系统测试与优化介绍系统测试的方法、过程及性能优化策略。第5章研究结果与分析呈现音乐播放网站设计与实现的研究结果。5.1系统功能测试结果展示系统各项功能的测试结果,包括功能完整性、稳定性等。5.2用户反馈与评价收集并分析用户对音乐播放网站的使用反馈与评价。5.3对比方法分析将本设计与实现与其他类似系统进行对比分析,突出优势与不足。第6章结论与展望总结音乐播放网站设计与实现的研究成果,并展望未来发展方向。6.1研究结论概括音乐播放网站设计与实现的主要成果及创新点。6.2展望指出当前研究的不足,提出未来改进方向及可
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值