hdu3006 状态压缩+位运算+hash(小想法题)
题意:
给了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(小想法题)相关推荐
- 洛谷P1562 还是N皇后(DFS+状态压缩+位运算)
八皇后问题的介绍在此不再赘述,只贴一下经典八皇后问题的实现代码(参考刘汝佳 <算法竞赛入门经典>) void search(int i) {if(i>n){ans++;return; ...
- POJ-2414 Phylogenetic Trees Inherited 状态压缩,位运算处理集合操作
该题解题过程非常优美,通过位操作来维护一个可选字符集合.并且完成求并集和交集. 详见代码: #include <cstring> #include <cstdio> #incl ...
- POJ - 3279 Fliptile(状态压缩+位运算+暴力)
题目链接:点击查看 题目大意:给出一个n*m的01矩阵,为了好描述,我们设0和1是两个相反的状态,我们的目标是要将整个矩阵全部变成1,现在我们可以将某一个点(x,y)更改为相反的状态,不过相应的该点周 ...
- LeetCode 2157. 字符串分组(状态压缩+位运算+图的遍历)
文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始的字符串数组 words . 每个字符串都只包含 小写英文字母 .words 中任意一个子串中,每个字母都至多只出现一次. 如果通 ...
- 位运算在一类数组题中的用法 只出现一次的数字I
文章目录 前言 复习 一:只出现一次的数字I 二:只出现一次的数字II 二:只出现一次的数字III 前言 LeetCode上有几道题特别相似,分别是leetcode 136只出现一次的数(简单),13 ...
- 2018-1-20:左移和右移运算以及和(无符号右移)的区别以及位运算的小题目...
首先:左移和右移以及无符号右移都是应用于2的次幂运算 左移几位就相当于该数据乘以2的几次方:即完成2的次幂运算 右移几位就相当于该数据除以2的几次方:即完成2的次幂运算,右移有个小特点:右移之后空出的 ...
- java 位运算 多个状态_位运算表示对象所处状态
通过一个integer类型属性来表示对象所处的状态: CASE: Invitor:邀请者对象模型 Integer Invitor.joinstatus:邀请者所处参加状态 当前存在状态声明:是否被邀请 ...
- hdu 5063 不错的小想法题(逆向处理操作)
题意: 刚开始的时候给你一个序列,长度为n,分别为a[1]=1,a[2]=2,a[3]=3,a[4]=4...a[n]=n,然后有4种操作如下: Type1: O 1 call fun1( ...
- 位运算简介及实用技巧(一):基础篇
去年年底写的关于位运算的日志是这个Blog里少数大受欢迎的文章之一,很多人都希望我能不断完善那篇文章.后来我看到了不少其它的资料,学习到了更多关于位运算的知识,有了重新整理位运算技巧的想法.从今天起我 ...
最新文章
- 5月Web服务器份额:Microsoft亚军 份额涨1.05%
- double click items in SBWP
- EFCore查询语句生成流程、让EFCore支持批量Update/Delete/MergeInto
- 三星+android7.0+字体,三星S7升级安卓7.0新技能:新增分辨率调整功能
- cron 每周一执行_详解定时任务中的 cron 表达式
- mysql更新id最大_我们可以在单个MySQL查询中更新具有最高ID的行吗?
- 【英语学习】【English L06】U05 Appointments L4 Making an appointment with a doctor
- python语言的开发者_写给.NET开发者的Python教程(一):引言
- 虚拟世界来自现实世界,同时又促进现实世界
- Android中SlidingDrawer介绍【安卓进化三十四】
- 利用jsoup 如何从网页中下载图片
- 用Python画一颗心、小人发射爱心
- [HDU5727]Necklace(二分图最大匹配,枚举)
- 2019.11.21工作记录——windriver生成PCI驱动32位向64位移植
- 华硕t100ha刷linux,华硕T100一键重装win7系统教程
- 解决SQLyog连接MySQL数据库时报2058错误
- CTF之代码审计汇总
- IBM SPSS Modeler 【5】 关联分析
- [小代码]通过IP和端口连接到远程摄像机
- 自动化立体仓库系统实训
热门文章
- WPF Wonders: Transformations (and Robots!)
- Framework7:不会Objective-C,也能开发iOS7应用
- 嘲笑一下SUN科技日开发者大会 O(∩_∩)O~
- PHP连接数据库的三种方式
- 性能测试07:服务器性能测试范围
- avalon $computed不起作用?
- jquery插件开发;(function ( $, window, document, undefined ){}(jQuery, window,document)分析
- apache 服务发布多个项目,只需要更改配置文件(需要设定虚拟主机)
- 开发者必备的12个JavaScript库
- div样式调整.txt