我在SPOJ上练习动态编程问题。但我不知道如何解决这个问题。
任何人都可以帮助我解决SPOJ上的http://www.spoj.pl/problems/ACODE/问题 谢谢!
爱丽丝和鲍勃需要彼此发送秘密消息 讨论编码邮件的方法:Alice:“我们只使用一个非常简单的代码:我们将为代码分配'A' 单词1,'B'将为2,依此类推,直到'Z'被指定为26。“
鲍勃:“这是一个愚蠢的代码,爱丽丝。假设我发给你'BEAN'这个词 编码为25114.您可以通过多种方式对其进行解码!“ 爱丽丝:“当然可以,但你会得到什么样的话?以外 'BEAN',你会得到'BEAAD','YAAD','YAN','YKD'和'BEKD'。我认为 你将能够找出正确的解码。为什么会这样 你还给我发了“BEAN”这个词吗?“鲍勃:”好吧,也许这很糟糕 例如,但我打赌你,如果你有一个长度为5000的字符串 会有很多不同的解码,你会发现很多 至少有两个不同的意义。“爱丽丝:”多少个 不同的解码?“Bob:”Jillions!“出于某种原因,爱丽丝仍然不相信鲍勃的论点,所以她 需要一个程序来确定可以有多少解码 使用她的代码获取给定字符串。
输入
输入将包含多个输入集。每组将包括一个 表示有效加密的最多5000位的单行 (例如,没有行以0开头)。没有空间 数字之间。输入行'0'将终止输入和 不应该被处理。
输出
对于每个输入集,输出可能的解码数 输入字符串。所有答案都在64位签名的范围内 整数。
实施例
输入:
25114 1111111111 3333333333 0
输出:
6 89 1
答案 0 :(得分:2)
从左侧开始,执行以下操作:
如果仍然无法获取,可以查看Welcome to Code Jam问题。它有点类似,并且有现成的解释。
答案 1 :(得分:0)
如果你有一串数字作为S,那么,有两种情况可能: 1)只有第一个数字对应一个字母 2)前两个数字对应于字母表。但是,只有前两位数字不能形成大于26的数字。
设S的大小为n。设f(Si)为最后i个数字形成的串数。请注意,您必须找到f(Sn)。 使用上述两个规则,您可以将关系编写为:
如果前两位数字形成一个数字< = 26:
f (S k )= f (S k-1 )+ f < / i>的(S <子> K-2 子>)
如果前两位数字形成一个数字&gt; 26: