最大。产品动态规划

时间:2014-06-25 10:55:15

标签: dynamic-programming

所以我试图解决Max. Product Question并提出以下递归:

 maxProd(n) = max of [k*(n-k),k*maxProd(n-k),maxProd(k)*(n-k),maxProd(k)*maxProd(n-k)]

然而,在该链接上给出的第二个解决方案中,他们跳过了maxProd(k)* maxProd(n-k)。

int maxProd(int n)
{
    // Base cases
    if (n == 0 || n == 1) return 0;

    // Make a cut at different places and take the maximum of all
    int max_val = 0;
    for (int i = 1; i < n; i++)
      max_val = max(max_val, i*(n-i), maxProd(n-i)*i);

    // Return the maximum of all values
    return max_val;
}

这还是对的吗?如果是这样,怎么样?当获得Max的唯一方法时,它不会给出错误的答案。产品递归地分为k和n-k?

1 个答案:

答案 0 :(得分:1)

你在这里写的公式也可以。但他们的人数较少。

请注意,您可以从原始公式中获得任何解决方案,因为它会检查所有可能的方法来选择第一个剪切。因此,如果第一次切割必须是i,那么我将被检查,并递归地继续到其他部分。

如果使用memoization,则两个公式都将获得相同的运行时。