【18普及 2】摩斯电码

【18普及 2】摩斯电码

考虑,我们只在乎 “Z” 的位置。

因为,除去 “Z” 以外的对 “R” 都没有影响,“R” 对之前的 “Z” 没有影响。

那么,状态就出来了:

设 f_{i,j} \left ( j \in \left [ 0,1 \right ] \right ) 为第 i 个位置选 \left ( j =1 \right ) “Z” 的方案数以及不选 \left ( j = 0 \right ) “Z” 的方案数。

转移有点复杂,要讨论 “一” 下:

f_{i,0}=f_{i-1,0}+f_{i-1,1}+f_{i-2,0}+f_{i-2,1}+f_{i-3,0}

如果这个不是 “R”

f_{i,0}+=f_{i-3,1}

如果现在选的长度为 4 且合法(存在)

        如果可以是 “Z”

        f_{i,1}+=f_{i-4,0}+f_{i-4,1}

        否则

        f_{i,0}+=f_{i-4,0}+f_{i-4,1}

由于我们要计算到前 4 位,所以,预处理一下吧……

f_{1,0}=1,f_{2,0}=2, f_{3.0}=4

如果前 4 个能组成 “Z”

f_{4,0}=7, f_{4,1}=1

否则

f_{4,0}=8, f_{4,1}=0

再来个预处理,手算出不存在的摩斯电码……

直接放上来吧:

const char notMS[4][10]={"0011","0101","1110","1111"};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值