Algorithm 公平分配规划问题的解决方案

Algorithm 公平分配规划问题的解决方案,algorithm,Algorithm,自从我参加编码比赛以来,我就遇到了麻烦。我认为这个问题属于公平分配的范畴,但我不确定。 我正在处理这个问题 我已经拿出了一个经验公式,所以我成功地测试了3次迭代 我无法想出一个工作代码,可以解决这个编程问题。非常感谢您的帮助。在整个解决方案中,我使用A表示酒店,使用B表示房屋 让我们定义3种类型的安排: 以A|B结尾的安排,即左侧为酒店,右侧为房屋 以B|A结尾的安排,即房子在左边,酒店在右边 以B|B结尾的排列,即两边的房子 让我们分别表示各个阵列: 数组one[i]表示具有街道长度i 数组

自从我参加编码比赛以来,我就遇到了麻烦。我认为这个问题属于公平分配的范畴,但我不确定。 我正在处理这个问题

我已经拿出了一个经验公式,所以我成功地测试了3次迭代


我无法想出一个工作代码,可以解决这个编程问题。非常感谢您的帮助。

在整个解决方案中,我使用
A
表示酒店,使用
B
表示房屋

让我们定义3种类型的安排:

  • 以A|B结尾的安排,即左侧为酒店,右侧为房屋
  • B
    |
    A
    结尾的安排,即房子在左边,酒店在右边
  • B
    |
    B
    结尾的排列,即两边的房子
  • 让我们分别表示各个阵列:

    • 数组
      one[i]
      表示具有街道长度
      i
    • 数组
      two[i]
      表示具有街道长度
      i
    • 数组
      three[i]
      表示具有街道长度
      i
    当街道长度增加
    1
    时,任何类型1的布置均可延长,如下所示:

    B
    |
    A

    A
    |
    B
    [A类型2排列]

    B
    |
    B

    A
    |
    B
    [A类型3排列]

    当街道长度增加
    1
    时,任何类型2的布置均可延长,如下所示:

    A
    |
    B

    B
    |
    A
    [类型1排列]

    B
    |
    B

    B
    |
    A
    [A类型3排列]

    当街道长度增加
    1
    时,任何类型3的布置均可延长,如下所示:

    A
    |
    B

    B
    |
    B
    [类型1排列]

    B
    |
    A

    B
    |B[类型2排列]

    B
    |
    B

    B
    |
    B
    [第3类安排]

    当街道长度为
    1
    时:

    1[1]=2[1]=3[1]=1
    (如示例测试用例中所述)

    当街道长度为
    i
    时:

    1[i]=2[i-1]+3[i-1]

    2[i]=1[i-1]+3[i-1]

    three[i]=1[i-1]+2[i-1]+three[i-1]

    对于长度为
    n
    的街道,您的答案是
    (一[n]+二[n]+三[n])%10^9+7

    For n=1: result = 3
    For n=2: result = 7
    For n=3: result = 17
    For n=4: result = 41
    
    由于
    n
    可能非常庞大,您需要为
    的值想出一个通用公式(一[n]+二[n]+三[n])%10^9+7

    For n=1: result = 3
    For n=2: result = 7
    For n=3: result = 17
    For n=4: result = 41
    
    亲自验证以上结果

    编辑:您可以使用矩阵求幂来找出
    O(logn)
    时间中
    n
    不同值的结果。查看更多详细信息

    可以使用矩阵表示递归关系

    (one[n+1])   =   ( 0 1 1 ) (one[n])
    (two[n+1])       ( 1 0 1 ) (two[n])
    (three[n+1])     ( 1 1 1 ) (three[n])
    
    使用这种表示法,可以通过矩阵指数(模
    10^9+7
    )计算大型
    n
    的值,使用平方指数。这将在O(logn)时间内给出结果


    愉快的编码…

    从您的解决方案中,我认为解决这个问题最简单的方法是递归。你能建议吗?还是有更好的方法?更好的方法叫做快速矩阵求幂!!查看我答案中的链接非常感谢您的帮助。顺便问一下,这是否属于公平分配的范畴?实际上我不确定。简单地说,这是一个基于
    安排和组合的问题。该解决方案还具有称为
    dynamic planning
    的编程技术的特性,我们可以根据以前的值计算新值,就像:
    one[i]=two[i-1]+three[i-1]
    awesome!谢谢顺便说一下,这是一个附带要求,我还有一个问题。您知道使用此处提供的CSV数据获取GDP的任何方法吗。我不知道用什么参数来评估GDP。每个国家有1345个参数,所以我不知道应该选择哪个。为什么我在这个问题上投了反对票?任何人,请帮助我理解,这样我就不会犯同样的错误。。。