了解在线测试的解决方案

时间:2016-01-24 04:26:25

标签: dynamic-programming

问题在以下链接中: http://www.spoj.com/problems/AEROLITE/

输入:

    1 1 1 1
    0 0 6 3
    1 1 1 2
    [and 7 test cases more]

输出:

    6
    57
    8
    [and 7 test cases more]

输出如何来自输入?

1 个答案:

答案 0 :(得分:1)

考虑与以下字母对应的输出:

一个。 1 1 1 1 = 6

湾0 0 6 3 = 57

℃。 1 1 1 2 = 8

以更具战术性的方式重述问题的定义,4个输入对应于以下内容:

  1. " {}"对
  2. " []"对
  3. "()"的数量对
  4. 生成输出时的最大深度
  5. 输出是一个单独的数字,表示与输入参数匹配的正则表达式的数量(可以与对使用多少深度)以及3对中可以生成多少组合以匹配优先级规则&#34 ;()"不能包含" {}"或" []"和" []"不能包含" {}"。

    下面的演练展示了如何达到输出,但它并没有试图打破子问题或其他任何问题。希望它至少可以帮助您连接数字并开始找到要解决的问题。

    明确地说明这些例子,从" a"开始。 1 1 1 1 = 6

    • 输入意味着只执行1的深度并使用1对" {}"," []","()&#34 ;。这是一种排列,可以将多少3种排列作为排列,所以3! = 6。
    • 实际:{},{}()[],[] {}(),{},(){} [],()[] {}

    然后去" b" 1 1 1 2 = 8

    • 这就像" a"除了我们现在必须允许另一个深度级别(d = 2而不是1)
    • 因此,这是来自" a" +深度= 2的任何其他组合 **附加= {[()]},{}(只有2个符合规则的情况)
    • "" +(d = 2的附加)= 8

    最后,考虑" b"在那里我们只探索6"()"的d = 3。

    • 我们必须分解并添加1,2和3的深度(d)
    • 因为这里只有括号,所以这只是一个加泰罗尼亚数字Cn,其中n = 6,但是限制在不超过3个括号的深度(更多关于此:https://en.wikipedia.org/wiki/Catalan_number)C(6) = 132,但是一旦你排除了超过3的深度的所有加泰罗尼亚数字,你就会有57场比赛。
    • 或者更麻烦地,您可以遍历深度为3或更小的所有括号组合以获得57条记录: **从d = 1开始,所以just()()()()()() **然后d = 2,所以例如(())()()()(),()(())()()(),()()(())()(),( )()()(())(), ()()()()(()), 等等 **然后d = 3,所以例如((()))()()(),()((()))()(),()()((()))(),( )()()((())),等等