[atAGC020E]Encoding Subsets
令$f_{S}$表示字符串$S$的答案(所有子集的方案数之和),考虑转移:
1.最后是一个字符串,不妨仅考虑最后一个字符,即$f_{S[1,|S|)}$(字符串下标从1开始),特别的,若$S_{|S|}=1$,还有一个2倍的系数
2.是一个乘法,考虑是$k\times T$,记$l=|T|$,则$T$需要是末尾$k$段长为$l$的串的公共子集,不难发现这个公共子集就是这$k$个串求and后的串$T'$的子集,那么贡献即为$f_{T'}\cdot f_{S[1,|S|-kl]}$
对其记忆化搜索即可,以下来证明状态数:
考虑$f_{S[1,|S|-kl]}$这个状态,一定会通过第一种若干次后得到,因此不需要考虑
接下来,构造一棵搜索树,但这棵搜索树的每一个儿子是父亲的一个长为$kl$的子串($k\ge 2$)的$k$段字符串求and后的结果,$S$为第一层
对于四层即以后的字符串,长度一定不超过$\lfloor\frac{n}{8}\rfloor$,即至多$o(2^{\lfloor\frac{n}{8}\rfloor})$个
对于前三层的字符串,显然只需要统计第三层就足够了
当其中某一层的$k\ge 3$时,那么这一个串长度不超过$\lfloor\frac{n}{6}\rfloor$,类似的总量为$o(2^{\lfloor\frac{n}{6}\rfloor})$,也可以接受
接下来,每一层的$k$都为2,之后假设其父亲长度为$l_{1}$,自己的长度为$l_{2}$,其对应于$S$中,即$S$中的4个长为$l_{2}$的串的and,且第1和2个串相连、第3和4个串相连
因此这个字符串仅取决于第一个起点、第二个起点以及串长,总量为$o(n^{3})$
总复杂度约为$o(2^{\lfloor\frac{n}{6}\rfloor}+n^{3})$,实际上分析仍有很大的改善空间,即跑不满
具体记忆化的实现哈希+map即可

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 105
4 #define mod 998244353
5 map<int,int>f[N];
6 char s[N];
7 int get_hash(int l,char *s){
8 int ans=0;
9 for(int i=0;i<l;i++)ans=(3LL*ans+s[i]-'0')%mod;
10 return ans;
11 }
12 int dfs(int l,char *s){
13 if (!l)return 1;
14 int h=get_hash(l,s);
15 if (f[l][h])return f[l][h];
16 int ans=(1+s[l-1]-'0')*dfs(l-1,s)%mod;
17 char t[N];
18 for(int i=1;i<=l/2;i++){
19 for(int k=0;k<i;k++)t[k]=s[l-i+k];
20 for(int j=2;i*j<=l;j++){
21 for(int k=0;k<i;k++)t[k]=min(t[k],s[l-i*j+k]);
22 ans=(ans+1LL*dfs(l-i*j,s)*dfs(i,t))%mod;
23 }
24 }
25 return f[l][h]=ans;
26 }
27 int main(){
28 scanf("%s",s);
29 printf("%d",dfs(strlen(s),s));
30 }
[atAGC020E]Encoding Subsets的更多相关文章
- AtCoder Grand Contest 020 (AGC020) E - Encoding Subsets 动态规划
原文链接www.cnblogs.com/zhouzhendong/p/AGC020E.html 前言 真 \(\cdot\) 信仰型动态规划 题解 我们可以采用信仰型动态规划解决此题. 设 \(dp[ ...
- Atcoder Grand Contest 020 E - Encoding Subsets(记忆化搜索+复杂度分析)
Atcoder 题面传送门 & 洛谷题面传送门 首先先考虑如果没有什么子集的限制怎样计算方案数.明显就是一个区间 \(dp\),这个恰好一年前就做过类似的题目了.我们设 \(f_{l,r}\) ...
- 【AtCoder】AGC020
A - Move and Win 题解 看两个人相遇的时候谁先手即可,相遇之后第一个移动的人必输 代码 #include <bits/stdc++.h> #define fi first ...
- DP 做题记录 II.
里面会有一些数据结构优化 DP 的题目(如 XI.),以及普通 DP. *I. P3643 [APIO2016]划艇 题意简述:给出序列 \(a_i,b_i\),求出有多少序列 \(c_i\) 满足 ...
- WC2021 题目清单
Day2 上午 <IOI题型与趣题分析> 来源 题目 完成情况 备注 IOI2002 Day1T1 Frog 已完成 IOI2002 Day1T2 Utopia IOI2002 Day1T ...
- 多校联训 DP 专题
[UR #20]跳蚤电话 将加边变为加点,方案数为 \((n-1)!\) 除以一个数,\(dp\) 每种方案要除的数之和即可. 点击查看代码 #include<bits/stdc++.h> ...
- 【转】数据预处理之独热编码(One-Hot Encoding)
原文链接:http://blog.csdn.net/dulingtingzi/article/details/51374487 问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. ...
- 数据预处理:独热编码(One-Hot Encoding)
python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...
- Direct Access to Video Encoding and Decoding
来源:http://asciiwwdc.com/2014/sessions/513 Direct Access to Video Encoding and Decoding Session 5 ...
随机推荐
- 10.8 location
创建一个前台站点 server { listen 80; server_name www.nginx.com; locaiton / { root /var/www/html/www; } } 创建一 ...
- 从零入门 Serverless | SAE 场景下,应用流量的负载均衡及路由策略配置实践
作者 | 落语 阿里云云原生技术团队 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门",即可获取 S ...
- Docker-初见
目录 Docker概述 Docker历史 Docker Docker的基本组成 Docker安装 使用流程 底层原理 Docker的常用命令 Portainer 可视化面板安装 镜像原理之联合文件系统 ...
- 通过简单例子 | 快速理清 UML 中类与类的六大关系
关于封面:我想我们都会离开 类与类之间的六大关系 泛化 ( Generalization ) ---> 表继承关系 实现 ( Realization ) 关联 ( Association ) 聚 ...
- UltraSoft - Alpha - Scrum Meeting 5
Date: Apr q9th, 2020. Scrum 情况汇报 进度情况 组员 负责 昨日进度 后两日任务 CookieLau PM 统筹个人进度,协助推进进度 辅助前后端连接工作 刘zh 前端 完 ...
- 2021.7.21考试总结[NOIP模拟22]
终于碾压小熠了乐死了 T1 d 小贪心一波直接出正解,没啥好说的(bushi 好像可以主席树暴力找,但我怎么可能会呢?好像可以堆优化简单找,但我怎么可能想得到呢? 那怎么办?昨天两道单调指针加桶,我直 ...
- OTA测试介绍
OTA 测试介绍 手机的无源测试和有源测试 当前在手机射频性能测试中越来越关注整机辐射性能的测试,这种辐射性能反映了手目前主要有两种方法对手机的辐射性能进行考察:一种是从天线是目前较为传统的天线测试方 ...
- Sharding-JDBC基本使用,整合Springboot实现分库分表,读写分离
结合上一篇docker部署的mysql主从, 本篇主要讲解SpringBoot项目结合Sharding-JDBC如何实现分库分表.读写分离. 一.Sharding-JDBC介绍 1.这里引用官网上的介 ...
- 转:bash shell 语法1
1 Shell介绍 Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batc ...
- cf 11A Increasing Sequence(水,)
题意: A sequence a0, a1, ..., at - 1 is called increasing if ai - 1 < ai for each i: 0 < i < ...