【问题标题】:SPOJ ALPHA CODE [closed]SPOJ ALPHA 代码 [关闭]
【发布时间】:2012-01-29 04:19:01
【问题描述】:

我在 SPOJ 上练习动态规划问题。但我不知道如何解决这个问题。

谁能帮我解决 SPOJ 上的http://www.spoj.pl/problems/ACODE/ 问题 谢谢!

Alice 和 Bob 需要互相发送秘密消息,并且是 讨论编码信息的方法:

Alice:“让我们使用一个非常简单的代码:我们将把代码分配给‘A’ 单词 1,“B”将是 2,依此类推,直到“Z”被分配 26。”

Bob:“这是一个愚蠢的代码,Alice。假设我给你发了“豆”这个词 编码为 25114。您可以通过多种不同方式对其进行解码! 爱丽丝:“当然可以,但是你会得到什么?以外 “BEAN”,你会得到“BEAAD”、“YAAD”、“YAN”、“YKD”和“BEKD”。我认为 您将能够找出正确的解码。为什么会 你还是给我发了‘BEAN’这个词?”鲍勃:“好吧,也许这很糟糕 例如,但我敢打赌,如果你有一个长度为 5000 的字符串 会有很多不同的解码,你会发现很多 至少有两个不同的是有意义的。”爱丽丝:“多少 不同的解码?”鲍勃:“数百万!”

出于某种原因,爱丽丝仍然不相信鲍勃的论点,所以她 需要一个程序来确定可以有多少解码 使用她的代码为给定的字符串。

输入

输入将由多个输入集组成。每组将包括一个 代表有效加密的最多 5000 位数字的单行 (例如,任何行都不会以 0 开头)。不会有空格 数字之间。 “0”的输入线将终止输入和 不应处理。

输出

对于每个输入集,输出可能的解码次数 输入字符串。所有答案都将在 64 位有符号的范围内 整数。

例子

输入:

25114 1111111111 3333333333 0

输出:

6 89 1

【问题讨论】:

标签: c++ dynamic-programming


【解决方案1】:

从左边开始,执行以下操作:

  1. 使用先前为序列中的点计算的有限数量的值,找出到目前为止该序列可以解释为多少个单词(称为 x[k])。
  2. 移动到下一点。

如果还是搞不定,可以看看Welcome to Code Jam的问题。它有点相似,并且有现成的解释。

【讨论】:

  • 谢谢,你能解释一下吗?
  • 我故意含糊其辞。我的答案是一般的动态编程答案。这毕竟是一个编程竞赛网站。如果你需要更多帮助,你可能应该看看我也指出你的那个问题。如果您查看该问题的竞赛分析链接,您会发现一些关于如何解决该问题的讨论。那么你应该对如何解决 ACODE 问题有了一些想法。
【解决方案2】:

如果你有一串数字作为 S,那么,有两种可能的情况: 1) 只有第一个数字对应一个字母 2) 前两位数字对应一个字母。但是,只有前两位数字不构成大于 26 的数字。

令 S 的大小为 n。令 f(Si) 为由最后 i 个数字组成的字符串数。请注意,您必须找到 f(Sn)。 使用以上两条规则,您可以将关系写为:

如果前两位数字组成一个数字

f ( Sk ) = f (Sk-1) + f (Sk-2)

如果前两位数字组成 > 26 :

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2017-05-16
    • 2023-03-27
    相关资源
    最近更新 更多