2019年1月14日训练日记

今天下了一天的大雪,今天做了E这道题,题意:长度为L的字符串,每一位可以填’f’或’m’,如果某个字符串中任意相邻的三个字符组成了"fmf"或"fff"就是所谓O队列,不存在O队列的字符串被称为E队列,现在问长度为L的E队列有多少种,答案取模M
首先肯定考虑dp,显然状态是可以递推的
设dp[n]表示长度为n的E序列的方案数,那么考虑什么状态可以转移到dp[n]
第n位可以放的字符分别为’f’和’m’
1.若放’m’,那么对前面n-1的序列没有任何限制,则dp[n-1]可以全部转移过来,则 +dp[n-1]

2.若放’f’,那么对前面的序列就有要求了,那么再考虑往前一位到达[n-1],
可以发现不管f[n-1]填’f’还是’m’都不能确定,因为都有可能组成O队列
所以再往前考虑一位到达[n-2]

若[n-1]填'm',那么[n-2]只能填'm',那么在这个情况下所有dp[n-3]都是满足条件的状态,则 +dp[n-3]
若[n-1]填‘f’,那么[n-2]只能填'm',在这个情况下并不是所有dp[n-3]都是满足的状态因为[n-3]不能填'f',也就是[n-3]只能填'm' 那么在这个情况下,所有dp[n-4]都是满足条件的状态,则 +dp[n-4]

以上,那么就解决了递推的问题
加油!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值