题意:
       给了n个集合,问你这n个集合可以组合出多少种集合,可以自己,也可以两个,也可以三个....也可以n个集合组在一起。


思路:

      是个小想法题目,要用到二进制压缩,位运算,还有hash,这4样加起来说明这个题目真的很不错,不废话,首先对于每个集合有k个元素,每个元素都是不大于14的,那么我们可以二进制压缩,把每个集合压缩成一个二进制数,压缩过程设计到位运算对于每个集合
tmp = 0;
for(i ,1 - k) scanf(num) ,tmp = tmp | (1 << (num - 1));
hash[tmp] = 1;标记上当前的这个集合是可以得到的。
这样最后的这个tmp就是当前的这个集合压缩后的数,然后我们在枚举之前的所有可能状态,得到新的可能状态(其实就是简单dp)

for(i = 1 ;i < 1 << 14 ;i ++) if(hash[i]) hash[i|tmp] = 1; 之前的可能情况加上当

前的可能情况也是可能情况。最后在统计下可能情况的个数就ok了,
for(i = 1 ;i < 1 << 14 ;i ++) if(hash[i]) ans++;

做这个题目的时候sb了,开了个 hash[1<<13+1] 哎! 1<<13+1 != 1 << 14 - 1.


#include<stdio.h>
#include<string.h>

int hash[1 << 14];int main ()
{int n ,m ,i ,j ,k ,num ,tmp ,ans;while(~scanf("%d %d" ,&n ,&m)){memset(hash ,0 ,sizeof(hash));for(i = 1 ;i <= n ;i ++){scanf("%d" ,&k);tmp = 0;for(j = 1 ;j <= k ;j ++)scanf("%d" ,&num) ,tmp = tmp | (1 << (num - 1));hash[tmp] = 1;for(j = 0 ;j < 1 << 14 ;j ++)if(hash[j]) hash[tmp | j] = 1;}ans = 0;for(i = 0 ;i < 1 << 14 ;i ++)if(hash[i]) ans ++;printf("%d\n" ,ans);}return 0;
} 

hdu3006 状态压缩+位运算+hash(小想法题)相关推荐

  1. 洛谷P1562 还是N皇后(DFS+状态压缩+位运算)

    八皇后问题的介绍在此不再赘述,只贴一下经典八皇后问题的实现代码(参考刘汝佳 <算法竞赛入门经典>) void search(int i) {if(i>n){ans++;return; ...

  2. POJ-2414 Phylogenetic Trees Inherited 状态压缩,位运算处理集合操作

    该题解题过程非常优美,通过位操作来维护一个可选字符集合.并且完成求并集和交集. 详见代码: #include <cstring> #include <cstdio> #incl ...

  3. POJ - 3279 Fliptile(状态压缩+位运算+暴力)

    题目链接:点击查看 题目大意:给出一个n*m的01矩阵,为了好描述,我们设0和1是两个相反的状态,我们的目标是要将整个矩阵全部变成1,现在我们可以将某一个点(x,y)更改为相反的状态,不过相应的该点周 ...

  4. LeetCode 2157. 字符串分组(状态压缩+位运算+图的遍历)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始的字符串数组 words . 每个字符串都只包含 小写英文字母 .words 中任意一个子串中,每个字母都至多只出现一次. 如果通 ...

  5. 位运算在一类数组题中的用法 只出现一次的数字I

    文章目录 前言 复习 一:只出现一次的数字I 二:只出现一次的数字II 二:只出现一次的数字III 前言 LeetCode上有几道题特别相似,分别是leetcode 136只出现一次的数(简单),13 ...

  6. 2018-1-20:左移和右移运算以及和(无符号右移)的区别以及位运算的小题目...

    首先:左移和右移以及无符号右移都是应用于2的次幂运算 左移几位就相当于该数据乘以2的几次方:即完成2的次幂运算 右移几位就相当于该数据除以2的几次方:即完成2的次幂运算,右移有个小特点:右移之后空出的 ...

  7. java 位运算 多个状态_位运算表示对象所处状态

    通过一个integer类型属性来表示对象所处的状态: CASE: Invitor:邀请者对象模型 Integer Invitor.joinstatus:邀请者所处参加状态 当前存在状态声明:是否被邀请 ...

  8. hdu 5063 不错的小想法题(逆向处理操作)

    题意:       刚开始的时候给你一个序列,长度为n,分别为a[1]=1,a[2]=2,a[3]=3,a[4]=4...a[n]=n,然后有4种操作如下: Type1: O 1 call fun1( ...

  9. 位运算简介及实用技巧(一):基础篇

    去年年底写的关于位运算的日志是这个Blog里少数大受欢迎的文章之一,很多人都希望我能不断完善那篇文章.后来我看到了不少其它的资料,学习到了更多关于位运算的知识,有了重新整理位运算技巧的想法.从今天起我 ...

最新文章

  1. 5月Web服务器份额:Microsoft亚军 份额涨1.05%
  2. double click items in SBWP
  3. EFCore查询语句生成流程、让EFCore支持批量Update/Delete/MergeInto
  4. 三星+android7.0+字体,三星S7升级安卓7.0新技能:新增分辨率调整功能
  5. cron 每周一执行_详解定时任务中的 cron 表达式
  6. mysql更新id最大_我们可以在单个MySQL查询中更新具有最高ID的行吗?
  7. 【英语学习】【English L06】U05 Appointments L4 Making an appointment with a doctor
  8. python语言的开发者_写给.NET开发者的Python教程(一):引言
  9. 虚拟世界来自现实世界,同时又促进现实世界
  10. Android中SlidingDrawer介绍【安卓进化三十四】
  11. 利用jsoup 如何从网页中下载图片
  12. 用Python画一颗心、小人发射爱心
  13. [HDU5727]Necklace(二分图最大匹配,枚举)
  14. 2019.11.21工作记录——windriver生成PCI驱动32位向64位移植
  15. 华硕t100ha刷linux,华硕T100一键重装win7系统教程
  16. 解决SQLyog连接MySQL数据库时报2058错误
  17. CTF之代码审计汇总
  18. IBM SPSS Modeler 【5】 关联分析
  19. [小代码]通过IP和端口连接到远程摄像机
  20. 自动化立体仓库系统实训

热门文章

  1. WPF Wonders: Transformations (and Robots!)
  2. Framework7:不会Objective-C,也能开发iOS7应用
  3. 嘲笑一下SUN科技日开发者大会 O(∩_∩)O~
  4. PHP连接数据库的三种方式
  5. 性能测试07:服务器性能测试范围
  6. avalon $computed不起作用?
  7. jquery插件开发;(function ( $, window, document, undefined ){}(jQuery, window,document)分析
  8. apache 服务发布多个项目,只需要更改配置文件(需要设定虚拟主机)
  9. 开发者必备的12个JavaScript库
  10. div样式调整.txt