HDOJ-2047 阿牛的EOF牛肉串(递推)

博客探讨了如何解决HDOJ-2047问题,即长度为n的'E' 'O' 'F'字符串不能有两个'O'相邻的组合数。通过逆向推导,得出递推公式f(n)=f(n-1)*2+f(n-2)*2。关键在于理解已求得的f(m) (m<n)的合法性,并根据'n'位置的字符对前'n-1'位置的影响进行分析。
摘要由CSDN通过智能技术生成

题目:HDOJ-2047

题目描述:长度为n的字符串,包含’E’ ‘O’ ‘F’三个字符(可以只有其中一种或两种字符),而且不能两个’ O’ 相邻,求长度为n时可能的组合数。(0<n<40)

思路:
重点是逆向推导,利用已求到的f(n-1)、f(n-2)…得到f(n)。
一开始想的太复杂了,一直分析到了n+3,如下:
①f(n-2) n-1 : E/F n : E/F/O    得到 f(n-2) * 2 *3
②f(n-3) n-2 : E/F n-1 : 0 n : E/F  得到f(n-3) * 2 * 2
最终得到f(n)=f(n-2)*6+f(n-3)*4,实际上我这是对n-1位置上的两种情况进行讨论了,其实完全没必要这么麻烦。

递推很重要的一点是已求到的f(m) (m<n) 是一定合法的。
①f(n-1) n : E/F 得到f(n-1) * 2
当n位置上是E/F,前n-1个位置只要合法即可,n位置对前n-1个位置不造成任何影响,所以可以直接套用f(n-1)。
②f(n-2) n-1 : E/F n : O 得到f(n-2) * 2 * 1
当n位置上是O,n-1位置只能为E/F,同理前n-2位置直接套用f(n-2)。
最终得到f(n)=f(n-1)*2+f(n-2)*2

其实一道题的递推公式不止一种形式,不过结果都是一样的,只是分析过程不同。
逆推通常的思路:对n情况进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值