所以我试图解决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?
答案 0 :(得分:1)
你在这里写的公式也可以。但他们的人数较少。
请注意,您可以从原始公式中获得任何解决方案,因为它会检查所有可能的方法来选择第一个剪切。因此,如果第一次切割必须是i,那么我将被检查,并递归地继续到其他部分。
如果使用memoization,则两个公式都将获得相同的运行时。