Data structure you've never heard of(枚举+dp)
没有来源。
题目大意:
给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)相关推荐
- TRIE - Data Structure
Introduction 介绍 Trie,又称单词查找树,是一种树形结构,用于保存大量的字符串.它的优点是:利用字符串的公共前缀来节约存储空间. Trie is an ordered tree dat ...
- CF data structure 自制题单(一)
CF data structure 2000~2100 为你的战斗,献上雷鸣般的喝彩!--唔姆 目标 30 道题 1. Problem - 1555E - Codeforces 看了提示 给一些线段, ...
- LeetCode Two Sum III - Data structure design
原题链接在这里:https://leetcode.com/problems/two-sum-iii-data-structure-design/ 题目: Design and implement a ...
- leetcode 211. Add and Search Word - Data structure design Trie树
题目链接 写一个数据结构, 支持两种操作. 加入一个字符串, 查找一个字符串是否存在.查找的时候, '.'可以代表任意一个字符. 显然是Trie树, 添加就是正常的添加, 查找的时候只要dfs查找就可 ...
- leetcode Add and Search Word - Data structure design
我要在这里装个逼啦 class WordDictionary(object):def __init__(self):"""initialize your data str ...
- 牛客小白月赛11:Rinne Loves Data Structure
Rinne Loves Data Structure 思路 我们插入的位置大概分了四种: 第一种 显然我们找到比当前插入的值的pre,也就是比当前节点大的最小值. 第二种 我们只要找到当前节点的suc ...
- HDU - 7072 Boring data structure problem 双端队列 + 思维
传送门 文章目录 题意: 思路: 题意: 你需要实现如下四个操作 q≤1e7q\le1e7q≤1e7 思路: 做的时候想了个链表的思路让队友写了,懒. 看了题解感觉题解还是很妙的. 你需要快速插入一个 ...
- HDU - 6967 G I love data structure 线段树维护矩阵 + 细节
传送门 文章目录 题意: 思路: 题意: 给你两个长度为nnn的数组a,ba,ba,b,你需要完成如下四种操作: 思路: 思路还是比较简单的,首先建一颗线段树,线段树中维护a,b,a2,b2,aba, ...
- 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 ...
最新文章
- Xamarin Essentials教程设备信息DeviceInfo
- rxjs of操作符生成的Observable对象的执行详细分析
- CRM Fiori Simulation pipeline应用点了bubble控件的实现
- php如何在某个时间上加一天?一小时? 时间加减(转)
- linux 链接文件 通配符,linux globbing文件通配符
- python编程从入门到实践之外星人入侵
- 修改TFS2013服务账户或者密码
- 应用安全 - 工具使用 - Nmap
- Python 中的 classmethod 和 staticmethod 有什么具体用途?
- 直播svga礼物应该如何设计,让用户更加青睐
- 网易云轻舟微服务斩获“创新产品奖”等两项大奖
- 利用jink的驱动软件j-flash 合并两个hex的方法,bootloader+app -(转载)
- Shamir门限秘密共享方案 秘密分配及还原过程详解 【橘小白】
- 通过userAgent判断是是否手机、微信、手机厂家
- 《计算机组成原理》大题必考!
- 华为面试应该怎么准备?
- nodejs express搭建服务器(爬虫知乎精华帖,个人学习用)六 html
- 3. MySQL笔记
- 泛微OA 开发环境搭建 IDEA
- aip文档服务器已停止工作,ColdFusion的11 REST API服务似乎意外地停止工作
热门文章
- matlab中删除照片_matlab中删除对象
- 杜比dss200服务器重装,杜比dss200服务器恢复系统操作.pdf
- excel将一个工作表根据条件拆分成多个工作表图文教程
- java 解析 svg文件_java – 如何加载和解析SVG文档
- 微信“小程序”来了,短期不可高估,长期不可低估
- 中企海外周报 | 中国众多品牌亮相IFA;喜茶新加坡第三家店开业
- 互联网晚报 | 3月8日 星期二 |​ ​​王传福卸任杭州比亚迪董事长;苏宁易购:南京银行拟收购苏宁消费金融36%股权...
- jekenis实现oracle导入导出,What would the author do with Ken Smit..._考试资料网
- SQL Server 2014如何修改数据库名
- pdf工具类之添加页码