Uestc1291 上天的卿学姐【状压dp】
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】相关推荐
- 2016 UESTC Training for Data Structures O - 卿学姐种美丽的花 树状数组+等差数列
O - 卿学姐种美丽的花 Time Limit: 8000/4000MS (Java/Others) Memory Limit: 125535/65535KB (Java/Others) Su ...
- D - 卿学姐与魔法
卿学姐与魔法 Time Limit: 1200/800MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...
- cdoj 1328 卿学姐与诡异村庄 Label:并查集 || 二分图染色
卿学姐与诡异村庄 Time Limit: 4500/1500MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- 卿学姐与诡异村庄(并查集)
C - 卿学姐与诡异村庄 Time Limit: 4500/1500MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Sub ...
- CDOJ 1292 卿学姐种花 暴力 分块 线段树
卿学姐种花 题目连接: http://acm.uestc.edu.cn/#/problem/show/1292 Description 众所周知,在喵哈哈村,有一个温柔善良的卿学姐. 卿学姐喜欢和她一 ...
- CDOJ 1292 卿学姐种花(暴力,分块,线段树)
众所周知,在喵哈哈村,有一个温柔善良的卿学姐. 卿学姐喜欢和她一样美丽的花.所以卿学姐家的后院有很多的花坛. 卿学姐有n 个花坛,一开始第 i个花坛里有 A[i] 朵花.每过一段时间,卿学姐都会在花坛 ...
- 卿学姐种花(线段树)
卿学姐种花 Time Limit: 0/7500MS (Java/Others) Memory Limit: 0/220000KB (Java/Others) 众所周知,在喵哈哈村,有一个温柔 ...
- cdoj1344卿学姐种美丽的花
地址:http://acm.uestc.edu.cn/#/problem/show/1344 题目: 卿学姐种美丽的花 Time Limit: 8000/4000MS (Java/Others) ...
- A - 卿学姐与公主(线段树+单点更新+区间极值)
A - 卿学姐与公主 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
最新文章
- html5三国策略布阵,丰神三国怎样布阵 布阵方法推荐
- mongodb远程连接配置(亲测)
- TP6返回插入数据的自增ID
- a - 数据结构实验之串一:kmp简单应用_中高级面试必备:快速入门数据结构和算法
- 【原创】QT简单计算器
- html如何让字体自动变色,CSS使文字部分变色
- Win-MASM64汇编语言-and/or指令
- 数据库 | 远程连接centos7上数据库
- linux设置library path,如何在linux中设置环境变量LD_LIBRARY_PATH
- 第23集丨人生的智慧:练就一颗从容自在的心
- 保姆级笔记-佳能Canon LBP2900在Win10安装驱动
- node-webkit(Windows系统) 打包成exe文件后,被360杀毒软件误报木马的解决方法
- MSI文件无法安装问题
- R语言可视化散点图、ggrepel包的geom_text_repel函数避免数据点之间的标签互相重叠(设置segment.square为假以获得斜曲线,segment.inflect设置为真以引入拐点
- macbook 连接不上蓝牙鼠标 m585 m590 解决方法
- 券商融资融券业务今年将适时试点
- 【ByteCTF 2022】Crypto Writeup
- java线上培训机构排名前十,重要概念一网打尽!
- 利用k-means算法对灰度图像分割
- 平价款的血糖血压监测工具,用它养成健康生活习惯,dido F50S Pro上手
热门文章
- 国家统计局公布,平均工资最高的行业是......
- 最速下降方法与Newton方法
- 1096 大美数 (15 分)
- 让pv3d(papervision3D)支持单帧前进、后退(nextFrame)。
- CRM中的俱乐部管理
- 反省我十年开发犯过的错
- CentOS7中PotsgreSQL11双机备份
- ros下创建节点后运行总是出现[rospack] Error: package '***' not found
- Eigen Decomposition 特征分解
- 【报名来参与】访谈调研+企业盘点+榜奖峰会,与数据猿共筑2021