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. 学好SQL--MySQL简单使用(3)
  2. Android设计模式MVVM之DataBinding简单使用
  3. 表情可字怎么打_小辫子表情怎么打?两根毛表情符号复制
  4. 16_使用开源项目下载文件
  5. JDBC批处理插入更新MySQL Oracle
  6. Struts1表单验证方式
  7. ustc FreeBSD / rust 镜像源
  8. 两天撸一个天气应用微信小程序
  9. 将DVD中的VOB文件无损转换为MP4等常用视频格式的方法
  10. 模数转换(A/D)与数模转换(D/A)
  11. Oracle EBS供应商信息查询SQL语句
  12. 古代十二时辰,时辰,时辰对照表,十二时辰与时间对照表,12时辰,时辰表
  13. pr基本图形模板无法使用_Pr基本图形模板安装教程
  14. 3.摄像模组之Golden模组
  15. Unity3D之关于动画延时问题
  16. 联想小新潮7000黑苹果教程_联想小新 潮7000-13怎么装win10系统|联想小新 潮7000-13用u盘重装win10系统教程-系统城...
  17. python print 字体大小_Python print 玩转“点阵字”
  18. css 高度塌陷_css中父元素高度塌陷是什么意思,如何解决?(附代码)
  19. 产品生命周期优化法PACE
  20. okhttp3上传图片

热门文章

  1. SQL查询语句执行顺序详解
  2. input、buttom的type为submit的区别
  3. 阻止网络钓鱼诈骗的技巧
  4. Eclipse不自动编译java文件的终极解决方法
  5. 走嵌入式方向,一定要软硬件都懂吗?
  6. 文本指纹算法和系统简述
  7. 职业规划:人生一堂必修课
  8. 纯css画菱形,三角形,梯形,平行四边形
  9. Oracle序列(sequence)使用总结
  10. 酷狗列表页的html代码,html-列表实现