没有来源。

题目大意:

给nnn个长度为k" role="presentation" style="position: relative;">kkk的01串,求不下降序列的个数。
n≤100000,k≤16

" role="presentation" style="position: relative;">

" role="presentation" style="position: relative;">

" role="presentation" style="position: relative;">

" role="presentation" style="position: relative;">

" role="presentation" style="position: relative;">

解:

这个不是正常的16维偏序。
作为一个从未见过的数据结构,这道题感觉还挺妙的。

首先很容易想到一个dp。状压一下表示当前以那个数结尾的不下降序列个数。但是这样的复杂度过不了,O(n∗2k)" role="presentation" style="position: relative;">O(n∗2k)O(n∗2k)O(n*2^k)
如何优化这个做法?
要是把刚才那个过程看作两步:
1.计算这个数结尾的答案
2.把这个答案放进dp数组

诶,1,2步复杂度差距太大了,我们能不能平衡一下呢?
事实证明是可以的。

我们状态定义两维:f(i,j)f(i,j)f(i,j)表示前八位为iii,后八位是j" role="presentation" style="position: relative;">jjj的子集的方案数。转移的时候只用在前八位枚举iii的子集,算出答案后再枚举包含j" role="presentation" style="position: relative;">jjj的后八位给dp数组赋值。

居然就解决了!O(n∗2k2)O(n∗2k2)O(n*2^ \frac k 2)

orz根本想不到好吧。

#include<iostream>
#include<cstdio>
#include<cstring>
#define mod 1000000007
using namespace std;long long f[256][256],ans;
char s[25];
int n,k,t;int main()
{scanf("%d%d",&n,&k);for(int i=1;i<=n;i++){long long st=1;t=0;scanf("%s",s+1);for(int j=1;j<=k;j++)if(s[j]=='1')t+=(1<<(k-j));for(int j=0;j<=255;j++)if((j&(t>>8))==j)st=(st+f[j][t&255])%mod;ans=(ans+st)%mod;for(int j=0;j<=255;j++)if(((t&255)&j)==(t&255))f[t>>8][j]=(f[t>>8][j]+st)%mod;}printf("%lld",ans);
}

Data structure you've never heard of(枚举+dp)相关推荐

  1. TRIE - Data Structure

    Introduction 介绍 Trie,又称单词查找树,是一种树形结构,用于保存大量的字符串.它的优点是:利用字符串的公共前缀来节约存储空间. Trie is an ordered tree dat ...

  2. CF data structure 自制题单(一)

    CF data structure 2000~2100 为你的战斗,献上雷鸣般的喝彩!--唔姆 目标 30 道题 1. Problem - 1555E - Codeforces 看了提示 给一些线段, ...

  3. LeetCode Two Sum III - Data structure design

    原题链接在这里:https://leetcode.com/problems/two-sum-iii-data-structure-design/ 题目: Design and implement a ...

  4. leetcode 211. Add and Search Word - Data structure design Trie树

    题目链接 写一个数据结构, 支持两种操作. 加入一个字符串, 查找一个字符串是否存在.查找的时候, '.'可以代表任意一个字符. 显然是Trie树, 添加就是正常的添加, 查找的时候只要dfs查找就可 ...

  5. leetcode Add and Search Word - Data structure design

    我要在这里装个逼啦 class WordDictionary(object):def __init__(self):"""initialize your data str ...

  6. 牛客小白月赛11:Rinne Loves Data Structure

    Rinne Loves Data Structure 思路 我们插入的位置大概分了四种: 第一种 显然我们找到比当前插入的值的pre,也就是比当前节点大的最小值. 第二种 我们只要找到当前节点的suc ...

  7. HDU - 7072 Boring data structure problem 双端队列 + 思维

    传送门 文章目录 题意: 思路: 题意: 你需要实现如下四个操作 q≤1e7q\le1e7q≤1e7 思路: 做的时候想了个链表的思路让队友写了,懒. 看了题解感觉题解还是很妙的. 你需要快速插入一个 ...

  8. HDU - 6967 G I love data structure 线段树维护矩阵 + 细节

    传送门 文章目录 题意: 思路: 题意: 给你两个长度为nnn的数组a,ba,ba,b,你需要完成如下四种操作: 思路: 思路还是比较简单的,首先建一颗线段树,线段树中维护a,b,a2,b2,aba, ...

  9. 170. Two Sum III - Data structure design【easy】

    170. Two Sum III - Data structure design[easy] Design and implement a TwoSum class. It should suppor ...

最新文章

  1. Xamarin Essentials教程设备信息DeviceInfo
  2. rxjs of操作符生成的Observable对象的执行详细分析
  3. CRM Fiori Simulation pipeline应用点了bubble控件的实现
  4. php如何在某个时间上加一天?一小时? 时间加减(转)
  5. linux 链接文件 通配符,linux globbing文件通配符
  6. python编程从入门到实践之外星人入侵
  7. 修改TFS2013服务账户或者密码
  8. 应用安全 - 工具使用 - Nmap
  9. Python 中的 classmethod 和 staticmethod 有什么具体用途?
  10. 直播svga礼物应该如何设计,让用户更加青睐
  11. 网易云轻舟微服务斩获“创新产品奖”等两项大奖
  12. 利用jink的驱动软件j-flash 合并两个hex的方法,bootloader+app -(转载)
  13. Shamir门限秘密共享方案 秘密分配及还原过程详解 【橘小白】
  14. 通过userAgent判断是是否手机、微信、手机厂家
  15. 《计算机组成原理》大题必考!
  16. 华为面试应该怎么准备?
  17. nodejs express搭建服务器(爬虫知乎精华帖,个人学习用)六 html
  18. 3. MySQL笔记
  19. 泛微OA 开发环境搭建 IDEA
  20. aip文档服务器已停止工作,ColdFusion的11 REST API服务似乎意外地停止工作

热门文章

  1. matlab中删除照片_matlab中删除对象
  2. 杜比dss200服务器重装,杜比dss200服务器恢复系统操作.pdf
  3. excel将一个工作表根据条件拆分成多个工作表图文教程
  4. java 解析 svg文件_java – 如何加载和解析SVG文档
  5. 微信“小程序”来了,短期不可高估,长期不可低估
  6. 中企海外周报 | 中国众多品牌亮相IFA;喜茶新加坡第三家店开业
  7. 互联网晚报 | 3月8日 星期二 |​ ​​王传福卸任杭州比亚迪董事长;苏宁易购:南京银行拟收购苏宁消费金融36%股权...
  8. jekenis实现oracle导入导出,What would the author do with Ken Smit..._考试资料网
  9. SQL Server 2014如何修改数据库名
  10. pdf工具类之添加页码