Description

众所周知,卿学姐十分擅长数据结构。

一天卿学姐开始研究起二维偏序的问题,卿学姐三下五除二就写了个树状数组解决了。

于是卿学姐开始做三维的问题,搞了个树套树也是过了。

欲求不满的卿学姐直接开始搞五维的偏序,仔细思索之后,卿学姐研究出一种用分块加bitset的做法。

峰回路转,沈宝宝问感觉自己要上天的卿学姐16维偏序怎么做,卿学姐现在还在研究六维偏序,不得不将这个问题交给你。

为了简单起见,现在有nn个mm维01向量,定义向量uu大于等于向量vv,当且仅当向量uu中的每个分量都大于等于vv中对应位置的分量,即:

ui≥vi,1≤i≤m
现在问这个向量序列中有多少个子序列是单调不减的子序列。

由于答案可能很大,所以输出结果取模1e9+7

Input

第一行两个整数n,m分别表示向量的个数和向量的维度。

接下来nn行m列,第ii行为一个01的字符串,长度是m,表示第i个向量

1≤n≤200000,1≤d≤16

Output

输出一个整数,表示单调不减子序列的个数

Sample input and output

3 2
00
00
11

7

4 3
110
100
011
101

5

Hint

对于第二个样例来说,如果子序列最后的长度是1,我们总共能构造4个,如果最后的长度是2,我们能构造一个{100,101}。

解题思路:

很容易想到O(2m)O(2m)O(2^m)的状压dp。
一种是f[i]表示以i结尾的方案数,O(2m)O(2m)O(2^m)枚举子集状态确定新增方案数,O(1)O(1)O(1)转移;
一种是f[i]表示结尾小等于i的方案数,O(1)O(1)O(1)确定新增方案数,O(2m)O(2m)O(2^m)枚举超集转移;
考虑如何优化.
折半状态,结合两种算法,f[i][j]表示前8位确定为i,后8位是j的子集的方案数,确定新增方案数和转移就都是Om/2Om/2O^{m/2}的了。

#include<bits/stdc++.h>
using namespace std;const int mod=1e9+7;
int n,m,x,f[1<<8][1<<8];
char s[16];int main()
{//freopen("lx.in","r",stdin);scanf("%d%d",&n,&m);while(n--){scanf("%s",s);x=0;int len=strlen(s);for(int i=0;i<len;i++)x=(x<<1)+s[i]-'0';int a=x>>8,b=x^(a<<8),tmp=1;for(int i=a;;i=a&(i-1)){tmp=(tmp+f[i][b])%mod;if(!i)break;}for(int i=b;i<(1<<8);i=(i+1)|b)f[a][i]=(f[a][i]+tmp)%mod;}int ans=0;for(int i=0;i<(1<<8);i++)ans=(ans+f[i][255])%mod;cout<<ans;return 0;
}

Uestc1291 上天的卿学姐【状压dp】相关推荐

  1. 2016 UESTC Training for Data Structures O - 卿学姐种美丽的花 树状数组+等差数列

    O - 卿学姐种美丽的花 Time Limit: 8000/4000MS (Java/Others)     Memory Limit: 125535/65535KB (Java/Others) Su ...

  2. D - 卿学姐与魔法

    卿学姐与魔法 Time Limit: 1200/800MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...

  3. cdoj 1328 卿学姐与诡异村庄 Label:并查集 || 二分图染色

    卿学姐与诡异村庄 Time Limit: 4500/1500MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  ...

  4. 卿学姐与诡异村庄(并查集)

    C - 卿学姐与诡异村庄 Time Limit: 4500/1500MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Sub ...

  5. CDOJ 1292 卿学姐种花 暴力 分块 线段树

    卿学姐种花 题目连接: http://acm.uestc.edu.cn/#/problem/show/1292 Description 众所周知,在喵哈哈村,有一个温柔善良的卿学姐. 卿学姐喜欢和她一 ...

  6. CDOJ 1292 卿学姐种花(暴力,分块,线段树)

    众所周知,在喵哈哈村,有一个温柔善良的卿学姐. 卿学姐喜欢和她一样美丽的花.所以卿学姐家的后院有很多的花坛. 卿学姐有n 个花坛,一开始第 i个花坛里有 A[i] 朵花.每过一段时间,卿学姐都会在花坛 ...

  7. 卿学姐种花(线段树)

    卿学姐种花 Time Limit: 0/7500MS (Java/Others)     Memory Limit: 0/220000KB (Java/Others) 众所周知,在喵哈哈村,有一个温柔 ...

  8. cdoj1344卿学姐种美丽的花

    地址:http://acm.uestc.edu.cn/#/problem/show/1344 题目: 卿学姐种美丽的花 Time Limit: 8000/4000MS (Java/Others)    ...

  9. A - 卿学姐与公主(线段树+单点更新+区间极值)

    A - 卿学姐与公主 Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

最新文章

  1. html5三国策略布阵,丰神三国怎样布阵 布阵方法推荐
  2. mongodb远程连接配置(亲测)
  3. TP6返回插入数据的自增ID
  4. a - 数据结构实验之串一:kmp简单应用_中高级面试必备:快速入门数据结构和算法
  5. 【原创】QT简单计算器
  6. html如何让字体自动变色,CSS使文字部分变色
  7. Win-MASM64汇编语言-and/or指令
  8. 数据库 | 远程连接centos7上数据库
  9. linux设置library path,如何在linux中设置环境变量LD_LIBRARY_PATH
  10. 第23集丨人生的智慧:练就一颗从容自在的心
  11. 保姆级笔记-佳能Canon LBP2900在Win10安装驱动
  12. node-webkit(Windows系统) 打包成exe文件后,被360杀毒软件误报木马的解决方法
  13. MSI文件无法安装问题
  14. R语言可视化散点图、ggrepel包的geom_text_repel函数避免数据点之间的标签互相重叠(设置segment.square为假以获得斜曲线,segment.inflect设置为真以引入拐点
  15. macbook 连接不上蓝牙鼠标 m585 m590 解决方法
  16. 券商融资融券业务今年将适时试点
  17. 【ByteCTF 2022】Crypto Writeup
  18. java线上培训机构排名前十,重要概念一网打尽!
  19. 利用k-means算法对灰度图像分割
  20. 平价款的血糖血压监测工具,用它养成健康生活习惯,dido F50S Pro上手

热门文章

  1. 国家统计局公布,平均工资最高的行业是......
  2. 最速下降方法与Newton方法
  3. 1096 大美数 (15 分)
  4. 让pv3d(papervision3D)支持单帧前进、后退(nextFrame)。
  5. CRM中的俱乐部管理
  6. 反省我十年开发犯过的错
  7. CentOS7中PotsgreSQL11双机备份
  8. ros下创建节点后运行总是出现[rospack] Error: package '***' not found
  9. Eigen Decomposition 特征分解
  10. 【报名来参与】访谈调研+企业盘点+榜奖峰会,与数据猿共筑2021