蓝桥杯 Java Password Suspects

题目

官网链接:蓝桥杯官网
UVALive链接:UVALive
大意是:已知密码由26个小写字母组成,知道一个密码的m个子串,和密码的长度,求密码有多少种可能如果可能数小于等于42,则输出所有密码

参考

先给出参考的文章:lab104_yifan的博客
实际上百度出来的Password Suspects都是UVA 1076题,反而让我好奇的是UVA是什么,后来才知道是OJ(Online Judge)也就是在线的判题系统
在此也记录另一个博主的文章:OJ的推荐

思路

蓝桥官网也给出了,需要用AC自动机和DP算法,然而我并没有学过自动机这个东西,只能百度学习然后慢慢研究参考的代码的含义了。
这个算法的核心除了AC自动机之外,有是DP(动态规划)、状态压缩以及深度优先搜索,实际就是dfs函数,dp矩阵是三维矩阵,这个矩阵每一维度的含义需要深刻理解:
d[u][len][state]表示当前递归到了这样一个状态:
1.当前密码串已经确定的长度是len
2.用字典树对已确定的密码串进行匹配,到当前状态时,字典树匹配到的结点是u
3.如果state的二进制数是00001010B,假设密码子串有5个,则表示当前状态已经出现的密码子串有按输入顺序的第2、4个。
这里实际是一个状态压缩,将所有密码的可能压缩

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值