魔法动物园代码挑战Java杂志#6-2014

由于我们有一个递归定义,其中使用了逐渐减小的参数总和(在每一步减少1),动态规划在这里显得非常适用。State类仅用于存储动物数量的三倍。在填充新地图(分数)时,我在scorePrevious中使用了上一轮的值(参数和 x+y+z 减少1)。

可能的步骤是对称的,因此我们将动物的数量按降序排列S(x, y, z) = S(z, x, y),参数顺序无关紧要)。程序运行约2.5小时后,得到了一个解决方案,参见以下输出。后来我使用Lambda表达式实现了并行化处理。并行版本显著提升了性能,计算时间减少到49分钟。

请求的解决方案是4023,公式如下:

S(x, y, z) = max { S(x+1, y-1, z-1), S(x-1, y...