考虑,我们只在乎 “Z” 的位置。
因为,除去 “Z” 以外的对 “R” 都没有影响,“R” 对之前的 “Z” 没有影响。
那么,状态就出来了:
设 为第 个位置选 “Z” 的方案数以及不选 “Z” 的方案数。
转移有点复杂,要讨论 “一” 下:
如果这个不是 “R”
如果现在选的长度为 且合法(存在)
如果可以是 “Z”
否则
由于我们要计算到前 位,所以,预处理一下吧……
如果前 个能组成 “Z”
否则
再来个预处理,手算出不存在的摩斯电码……
直接放上来吧:
const char notMS[4][10]={"0011","0101","1110","1111"};