HDU2825

题目大意


  • 给定?个单词,统计所有长度为?的包含至少?个单词的串的个数
  • ? ≤ 25,? ≤ 10,单词长度 ≤ 10

分析


  • 对读入的?个单词建出 AC 自动机
  • 令??[?][?][????]代表长度为 ?,目前匹配到 AC 自动机上编号为? 的节点,已经包含的单词集合为????的方案数
  • 假设我们目前匹配到 AC 自动机上的节点?,那么能够包含的单词是 从点?开始,沿着????指针一直到根路径上的所有单词
  • 我们可以在构建 AC 自动机的 fail 指针时预处理出每个节点到根路径 上经过单词编号集合
  • ??[?][?][????]⟶?? [?+1][?? ?,?][????|sum[?? ?,?]],?为枚举的 下一个字符

Code


#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
using namespace std;
const int mod=20090717;
const int N=500;int tr[N][N],f[30][150][1500],end[N],sum[N],cnt[2000],fail[N],n,m,limit,ans,tot;void init(){memset(sum,0,sizeof(sum));memset(fail,0,sizeof(fail));memset(tr,0,sizeof(tr));memset(f,0,sizeof(f));f[0][0][0]=1;ans=tot=0;
}
void insert(string s,int pos){int now=0,len=s.size();rep(i,0,len-1){if(!tr[now][s[i]-'a'])tr[now][s[i]-'a']=++tot;/注意!变量值会发生变化// now=tr[now][s[i]-'a'];}sum[now]=1<<pos;
}
void AC(){queue<int> q;rep(i,0,25)if(tr[0][i])q.push(tr[0][i]);while(q.size()){int x=q.front();q.pop();rep(i,0,25){if(!tr[x][i])tr[x][i]=tr[fail[x]][i];else{q.push(tr[x][i]);fail[tr[x][i]]=tr[fail[x]][i];}sum[tr[x][i]]|=sum[tr[fail[x]][i]];/注意!变量值会发生变化// }}
}
int count(int S){int num=0;while(S){if(S&1)num++;S>>=1;}return num;
}
int main()
{rep(i,0,1023)cnt[i]=count(i);while(~scanf("%d%d%d",&n,&m,&limit)&&(n||m||limit)){init();rep(i,0,m-1){string s;cin>>s;insert(s,i);}AC();//不要忘了构造fail指针 for(int i=0;i<=n;i++){for(int j=0;j<=tot;j++){for(int k=0;k<(1<<m);k++){if(!f[i][j][k])continue;for(int t=0;t<26;t++){int y=tr[j][t];f[i+1][y][k|sum[y]]=(f[i+1][y][k|sum[y]]+f[i][j][k])%mod;}}}}rep(j,0,tot)rep(k,0,(1<<m)-1)if(cnt[k]>=limit)ans=(ans+f[n][j][k])%mod;cout<<ans<<"\n";}return 0;
}

【HDU2825】AC自动机+状压DP相关推荐

  1. HDU - 2825 Wireless Password(AC自动机+状压dp)

    题目链接:点击查看 题目大意:给出 m 个匹配串,问长度为 n 的字符串中,至少包含 k 个匹配串(可重叠)的字符串有多少个 题目分析:考虑到n,m,k都特别小,所以可以先用AC自动机将状态关系转移出 ...

  2. AC自动机+状压dp hdu2825 Wireless Password

    传送门:点击打开链接 题意:有个密码长度为n,现在有m个魔力单词,要求密码中魔力单词的种类数>=k,问这种密码的种类数. 思路:和之前一样,我们会想到AC自动机去压缩状态,把状态给简化.然后我们 ...

  3. 【hdu2825】ac自动机 + 状压dp

    传送门 题目大意: 给你一些密码片段字符串,让你求长度为n,且至少包含k个不同密码片段串的字符串的数量. 题解: 因为密码串不多,可以考虑状态压缩 设dp[i][j][sta]表示长为i的字符串匹配到 ...

  4. hdu 6086 -- Rikka with String(AC自动机 + 状压DP)

    题目链接 Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, s ...

  5. HDU - 3247 Resource Archiver(AC自动机+状压dp+bfs)

    题目链接:点击查看 题目大意:给出 n 个目标串和 m 个病毒串,要求构造出一个长度最短的,且包含全部 n 个目标串,但是不能包含任意一个病毒串的01字符串,输出其最短长度 题目分析:比较综合的一道题 ...

  6. HDU - 2825 Wireless Password (AC自动机 + 状压dp)

    题目链接 题意 求至少包含KKK个给定字符串长度为NNN的字符串 思路 把所有可能的字符串建AC自动机,遍历所有节点dp[i][j][k]dp[i][j][k]dp[i][j][k] 表示以节点jjj ...

  7. HDU - 3341 Lost's revenge(AC自动机+状压dp)

    题目链接:点击查看 题目大意:给出 n 个模式串,最后给出一个匹配串,问如何重新排列匹配串,可以使得匹配串尽可能多的匹配模式串 题目分析:因为是模式串和匹配串的匹配,所以考虑AC自动机,因为数据范围比 ...

  8. P4045-[JSOI2009]密码【AC自动机,状压dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P4045 题目大意 给nnn个字符串,求有多少个长度为lll的字符串包含所有给出的字符串 解题思路 因为nnn很小, ...

  9. hdu 6086 Rikka with String(AC自动机+状压dp)

    题目链接:hdu 6086 Rikka with String 题意: 给你n个只含01的串,和一个长度L,现在让你构造出满足s[i]≠s[|s|−i+1] for all i∈[1,|s|] ,长度 ...

  10. ACM-ICPC 2018 南京赛区网络预赛 J AC Challenge (状压dp)

    题意 给你n道题,在你做第ii{i}道题的时候有p[j]p[j]{p[j]}个前置条件,当这些前置条件都满足的时候,我们可以得到a[j]∗t+b[j]a[j]∗t+b[j]a[j] * t + b[j ...

最新文章

  1. [导入]用Ext做的登陆窗口的例子
  2. matlab画扇区,NFCDemo NFC读写测试 ,自动读取每个扇区 块的值 matlab 238万源代码下载- www.pudn.com...
  3. Jupyter 编写python代码实现代码自动补齐功能设置实例演示
  4. 科技领袖技术大亨们被指是现代强盗:不仅赚钱还想垄断
  5. spring cloud: 使用consul来替换config server,config key/value 具体的配置详解
  6. Java—关于单例模式的实现方式
  7. mysql 存储引擎和数据导入导出
  8. 非常有名的免费开源图库相册软件
  9. linux在电子信息工程行业中的应用,电子信息工程概述论文
  10. list中随机获取n条、随机生成4位6位数工具类,1-n范围随机数,Math.random()生成随机数
  11. 微信小程序中如何应用音频
  12. 精简版XP的IIS安装
  13. c语言错误1083,没有混音设备可用,启动Windows Audio服务时错误1083
  14. android 隐藏wifi密码,手机连接隐藏wifi怎么设置密码 手机如何添加隐藏wifi?-192路由网...
  15. 团体程序设计天梯赛 -- 练习集 (L1合集)
  16. html火狐浏览器秒杀插件,火狐浏览器Firefox(已装载常用渗透插件) 2018-06
  17. colorkey唇釉是否安全_colorkey唇釉孕妇可以用吗 colorkey唇釉可以用多久
  18. 我的心像洋葱,需要一层一层剥开,你才明白这颗心多爱你:Abstract中继承关系中,变量初始化与构造方法的关系
  19. LTE关键技术之一:OFDM
  20. 华为鸿蒙系统什么时候出手机,华为鸿蒙系统什么时候出 是否用于手机还未确定...

热门文章

  1. HTML打地鼠小游戏代码
  2. C语言实现一元二次方程的实根和复根
  3. delphi xe 之路(14)使用FireMonkeyStyle
  4. .html页面缓存问题
  5. python超简易入门笔记版(其二)
  6. ps粘贴图片模糊怎么破
  7. PHP 网页支付支付宝支付接口对接
  8. 微信公众号之免登陆快速入门
  9. php后台管理员登录密码错误,织梦后台登陆不上提示验证码不正确1.密码明明正确的,却无法登陆后台管理...
  10. 智能硬件产品开发流程梳理