- 6
- 0
- 约小于1千字
- 约 10页
- 2017-02-02 发布于天津
- 举报
还原暗号
还原暗号 160320039 黄鑫 算法设计与分析作业 解题思路分享 对于由小写字母组成的字符串s,给出一些转换规则。每条规则可以把s的头两个字母转成一个字母。可以任意反复使用这些规则。如:原串cca 规则1:cc-c 规则2:ca-acca (用规则1)- ca (规则2)- a已知最后的结果是一个字母a,原串长度为n。问原串有多少种可能。 题意: (1)把过程反过来:原问题可转化为:设一开始只有一个字母a,每次可以“反向”使用上述规则,把首字母变成两个字母,直到长度为n。求最后结果的种数。 思路 (2)只和首字母有关:做了第一步转化后,规则变成如”a-bc”。对于某个字符串,能否使用该规则,只需考虑其首字母是否为a。更进一步,不用考虑规则中的第二个字母。比如两条规则”a-bc”和”a-bd”,效果都是把首字母从a变成b。就不用管c和d的区别,只认为“有两条规则可以把首字母从a变成b”。 (3)分阶段,无后效性,递推: 根据以上分析,在总共n-1次转化中,每次都只考虑当前首元素如何变为下一步的首元素。这适合使用递推(动态规划)的方法进行处理。比如:第一次之后,使得首元素为a的方法有s1种,为b的有s2种…,并且有t1条规则可以把首元素由a变成a,t2条由b变成a… 那么第二个阶段后,首元素为a的方法种数 S=s1*t1+s2*t2… 这样
原创力文档

文档评论(0)