ai取值范围0~1,xi取值范围0~3,所以最后异或的结果不会超过两位二进制。所以可以用一个60位的数保存30个式子的值,然后m的范围是小于22,二分一下就可以了,4^11=4*10^6,结果存下来排个序然后二分找一下就可以了。

  

#include <stdio.h>
#include <string.h>
#include <algorithm>
typedef __int64 LL;
int cas,n,m,ai[35][30],si[30][4];
LL ans,tmp[1<<22+2];
int sum[1<<22+2];
int size,nsize;int binser(LL x){int low=0,high=size,mid;for(;;){mid=(low+high)/2;if(mid==low)break;if(tmp[mid]<=x)low=mid;else high=mid;}return tmp[mid]==x?sum[mid]:0;
}
LL cal(int p,int x){LL ans=0;for(int i=1;i<=n;i++)ans=(ans<<2)+(ai[i][p]*x);return ans;
}
void dfs(int p,LL now,int full,int id){if(p>full)id==0?tmp[size++]=now:ans+=binser(now);else for(int i=1;i<=si[p][0];i++)dfs(p+1,now^cal(p,si[p][i]),full,id);
}
int main(){//freopen("test.in","r",stdin);scanf("%d",&cas);while(cas--){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&ai[i][j]);for(int i=1;i<=m;i++){scanf("%d",&si[i][0]);for(int j=1;j<=si[i][0];j++){scanf("%d",&si[i][j]);}}ans=size=0;int halfm=m/2;dfs(1,0LL,halfm,0);std::sort(tmp,tmp+size);nsize=size,size=1,sum[0]=1;for(int i=1;i<nsize;i++){if(tmp[i]!=tmp[i-1]){tmp[size]=tmp[i],sum[size]=1,size++;}else sum[size-1]++;}dfs(halfm+1,0LL,m,1);printf("%I64d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/swm8023/archive/2012/08/27/2659363.html

HDU4025 Equation of XOR [二分+状态压缩]相关推荐

  1. CodeForces - 1288D Minimax Problem(二分+状态压缩)

    题目链接:点击查看 题目大意:给出一个n*m的矩阵,我们用maze[n][m]来表示每一个元素,现在我们需要选出其中 i 和 j 两行,i 和 j 可以相同,用这两行的元素构成一个新的数组a,构造规则 ...

  2. HDU - 6749 Mosquito(二分+状态压缩+最大流)

    题目链接:点击查看 题目大意:给出一个 n * m 的房间,再给出 k 个蚊子窝(保证蚊子窝在边界上),每个蚊子窝内有数只蚊子,单位时间内蚊子可以移动一个单位的曼哈顿距离,蚊子们都是非常聪明的,问最少 ...

  3. 解题报告(一)D、(CROC 2016 - Final Round C)Binary Table(矩阵 + 状态压缩 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  4. hdu 3681(bfs+dfs+状态压缩)

    解题思路:这道题属于图上来回走的问题,可以把重复走的过程弱化,即只强调从u->v的结果,中间经过的节点都不考虑.这道题里面'G','F','Y'是重要的节点,其余的点我们是可以忽略的,也就是说, ...

  5. 状态压缩DP(大佬写的很好,转来看)

    奉上大佬博客 https://blog.csdn.net/accry/article/details/6607703 动态规划本来就很抽象,状态的设定和状态的转移都不好把握,而状态压缩的动态规划解决的 ...

  6. LeetCode 1879. 两个数组最小的异或值之和(状态压缩DP)

    文章目录 1. 题目 2. 解题 2.1 回溯 2.2 状态压缩DP 1. 题目 给你两个整数数组 nums1 和 nums2 ,它们长度都为 n . 两个数组的 异或值之和 为 (nums1[0] ...

  7. 提高篇 第五部分 动态规划 第4章 状态压缩类动态规划

    例1 骑士(Sgu223) 1592:[例 1]国王 信息学奥赛一本通(C++版)在线评测系统 https://blog.csdn.net/guoyangfan_/article/details/82 ...

  8. HDU-4539 郑厂长系列故事——排兵布阵 状态压缩DP Or 最大团

    题意:给定一个方格,然后告诉你一些规则,这些规则下方格中的有些位置是相冲突的.问在方格中最多能够放置多少个士兵. 分析:比赛时一开始就想着用状态压缩DP来搞,不过忘了相邻三行产生关系同样可以通过添加状 ...

  9. 状态压缩技巧:动态规划的降维打击

    刷题认准labuladong 东哥带你手把手撕力扣???? 点击下方卡片即可搜索???? 我们号之前写过十几篇动态规划文章,可以说动态规划技巧对于算法效率的提升非常可观,一般来说都能把指数级和阶乘级时 ...

最新文章

  1. java中位与运算符_Java中位运算符和的区别
  2. *LOJ#2085. 「NOI2016」循环之美
  3. 报名领奖|云栖大会,10月19-22日杭州不见不散!
  4. 去掉桌面快捷方式小箭头的方法
  5. 一部论述修养人生处世出世的集录_读《菜根谭》,人生本是修心的过程
  6. 当代家长现状。。 | 今日最佳
  7. 第一百二十一期:当新闻报道用上AR 技术,能为读者带来什么?
  8. Stateflow变量范围
  9. java异常看不懂_报错了 看不懂求解
  10. GDI+简单现实文字旋转
  11. SpringCloud观后感
  12. 【Tensorflow教程笔记】常用模块 tf.data :数据集的构建与预处理
  13. Flink 第8.2章 Flink 的键组 KeyGroup 与 缩放 Rescale
  14. 定时线程池实现请求合并
  15. hive和presto计算日期时间差
  16. 全球100位人工智能名人和2500名资深AI人士,将聚首深圳
  17. 微信小程序 --- 不在以下合法域名列表中请参考文档
  18. python执行方式和设置_03-Python执行方式和Pycharm设置
  19. 写毕业论文期间的一些收获和感想
  20. c语言单身狗题目罩得住学长,我家系统用爱发电

热门文章

  1. 一直在构建版本_教你如提升Gradle90%的构建速度
  2. iscsi:IO操作流程(四)
  3. Spring mvc 重定向
  4. mysql with
  5. click group实例
  6. WaveShaperNode
  7. MongoDB Array Query Operators
  8. 机器学习 正则化(regularization)
  9. python多线程没用_Python 的多线程原来不是真的多线程啊
  10. VMware vSphere 6.7配置最大更改