博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[CC-BSTRLCP]Count Binary Strings
阅读量:7025 次
发布时间:2019-06-28

本文共 1357 字,大约阅读时间需要 4 分钟。

[CC-BSTRLCP]Count Binary Strings

题目大意:

对于一个长度为\(n\)\(\texttt0/\texttt1\)\(S\),如果存在一个切分\(i\),使得\(S_{[1,i]}\)\(S_{[i+1,n]}\)的LCP长度\(>k\),那么称\(i\)\(S\)的精准切分。

如果\(S\)至少有\(m\)个精准切分,那么称\(S\)是一个切分串。

给定\(n,k,m\),求有多少长度为\(n\)的切分串。

  • \(1\le T\le 5\)
  • \(1\le n\le50\)
  • \(0\le m\le n-1\)
  • \(0\le k\le \min(10,n)\)

思路:

枚举前\(k\)位的状态\(s\)\(f[i][j][k]\)表示考虑到第\(i\)位,已经有\(j\)个精准切分,最后匹配的长度为\(k\)的方案数。

预处理每种后缀能匹配\(s\)的多长的前缀,转移时枚举最后加上\(0\)还是\(1\)即可。

时间复杂度\(\mathcal O(4^kk+2^kn^2k)\)

源代码:

#include
#include
#include
#include
inline int getint() { register char ch; while(!isdigit(ch=getchar())); register int x=ch^'0'; while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0'); return x;}typedef long long int64;const int N=51,K=11,M=1024,mod=1e9+7;int f[2][N][K],g[M][K];inline void upd(int &a,const int &b) { (a+=b)%=mod;}int main() { for(register int T=getint();T;T--) { const int n=getint(),k=getint(),m=getint(); if(k==0) { printf("%lld\n",(1ll<
n) { puts("0"); continue; } const int all=(1<
>=1; } memset(f[0],0,sizeof f[0]); for(register int t=0;t<=all;t++) { for(register int i=1;i<=k;i++) { int l; for(l=i;l;l--) { if(p[l]==(t&((1<

转载于:https://www.cnblogs.com/skylee03/p/9870924.html

你可能感兴趣的文章
V-4-3 访问vCenter与操作
查看>>
运维DBA的4大纪律9项注意【转】
查看>>
写python的常用工具及设置
查看>>
PLSQL Developer软件使用大全
查看>>
PHP5.3.3添加安装mcrypt模块
查看>>
salt-minion自动化安装脚本
查看>>
给硬盘加密
查看>>
【CDN 常见问题】CDN协议跟随回源常见问题
查看>>
带账号、密码ssh的脚本
查看>>
Exchange Server 2010客户端的安全访问
查看>>
申请带@msn.com后缀的邮箱
查看>>
服务器断电导致虚拟机数据丢失怎么恢复?
查看>>
Android官方开发文档Training系列课程中文版:连接无线设备之网络服务搜索功能...
查看>>
浅撸 css3 flex 布局
查看>>
域用户和工作组
查看>>
模拟器与真机的程序差别J2ME
查看>>
vsftpd基于数据库文件实现虚拟用户管理站点目录
查看>>
静态成员和实例成员
查看>>
robotframework中文日志显示乱码
查看>>
Unit 12 电话留言
查看>>