Hackers' Crackdown
来源:互联网 发布:编程笔记本推荐 编辑:程序博客网 时间:2024/06/05 20:23
题意:
把n个集合分成尽量多组,使每组中所有集合的并集为全集.
#include<cstdio>#include<algorithm>#include<string>#include<cstring>using namespace std;const int maxn = 1<<17;int ans[maxn], cover[maxn];int node[20];int n;int main() {int C=0;while(scanf("%d", &n) && n) {int m, t;for(int j=0; j<n; j++) {node[j] = 1<<j;//自己也包含在里面scanf("%d", &m);for(int i=0; i<m; i++) {scanf("%d", &t);node[j] |= 1<<t;//与其相邻的计算机置为1}}int maxs = (1<<n)-1, s, s0;for(s=1; s<=maxs; s++) {//集合组合方式cover[s]=0;for(int j=0; j<n; j++) if(s & (1<<j))//组合包含第j个集合才能含有第j个集合的元素.cover[s] |= node[j];}for(s=1; s<=maxs; s++) {ans[s]=0;for(s0=s; s0; s0=(s0-1)&s) {//s0为s的子集if(cover[s0]==maxs) ans[s] = max(ans[s], ans[s^s0]+1);//s0包含所有的计算机时才执行, s^s0是s0从s里面分出一个组,所以+1.}}printf("Case %d: %d\n",++C,ans[s-1]);}return 0;}
0 0
- Hackers' Crackdown
- Uva-11825-Hackers’ Crackdown
- UVA 11825 Hackers' Crackdown
- UVA 11825 Hackers' Crackdown
- uva 11825 - Hackers' Crackdown
- UVA - 11825 Hackers' Crackdown
- uva11825 Hackers' Crackdown
- uva 11825 Hackers' Crackdown
- UVa 11825 Hackers’ Crackdown
- Uva11825 - Hackers' Crackdown
- uvaoj 11825 - Hackers' Crackdown
- uva11825 - Hackers' Crackdown
- UVA 11825 Hackers' Crackdown
- UVA 11825 Hackers' Crackdown
- UVa11825 Hackers' Crackdown
- 【UVA11825】Hackers' Crackdown
- UVa11825 Hackers' Crackdown
- uva 11825 - Hackers' Crackdown dp
- 王学岗Fragment(四)
- openwrt之wifi,以及mac80211
- Spark-Core源码阅读
- js面向对象编程以及继承
- DialogFragment 的一些常用属性备注
- Hackers' Crackdown
- Android源码剖析之----系统服务的获取
- 判断网络 比较苦逼 无法判断路由器 的WiFi 是否连接到网络
- 对android中事件的分发的理解
- 有关java编辑PDF的一些小问题
- 设计模式-单例模式
- Android多国语言的value文件夹命名方式
- Swift 基本知识之十三 构造函数
- Matplotlib 教程