HNOI2008 GT考试 BZOJ1009 洛谷P3193

该博客主要介绍了一道涉及数位动态规划的竞赛题目,讨论了如何处理不吉利数字的后缀问题。博主讲解了两种不同的状态转移方程,强调了避免重复计数的重要性,并提到了KMP算法在预处理中的应用。博客最后指出,虽然两种解法相似,但实现的代码有区别,并给出了不同情况下的状态转移例子。
摘要由CSDN通过智能技术生成

此题主要思路是dp,但dp有多种写法。

我们用f[i][j]表示现在已经有i个数字了,而且最后j个数字是不幸数字前j个数字。(保证不包含不吉利序列)

为了防止dp的意义出现歧义,我们让对于同一个状态j要竟可能大;

比如 1212是不幸数字,那么551212是f[6][4];

这样的话我们可以发现f[0][0]=1;

ans=f[n][k] ,k∈[0,m-1] ∪Z(若k=m,那么已经形成一个不吉利序列)

这样的话我们可以从f[0][0]地推;

每局这个状态最后放一个什么数字,然后kmp求j

a[j][k]表示j个不幸之后放k产生的新的j

       a[j][k]这个可以用kmp解决

这样可以得到转移方程f[i+1][a[j][k]]=(f[i+1][a[j][k]]+f[i][j])%mo;

意为已经知道f[i][j],最后j个是不吉利数字的前j个,加上一个数字k,最多形成不吉利序列的前a[j][k]个,所以可以通过f[i][j]的状态转移到f[i+1][a[j][k]]的状态。

此题满分需要用矩阵优化dp,但修改以后占比很小,此处不讲,想学习的同学可以上网查题解。

下面是网上使用范围更多的一种转移方程(但没有标程)。

设f[i][j]表示内容同上

f[i][j]的准确含义: f[i][j]表示的每种方案都不含长度大于j且与不吉利数的前缀相同 的后缀 (同上)

 否则就会出现:从1到m标号,不吉利数为123124时,f[i][2]

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值