![]() |
1
5
你的解决方案是正确的。然而,有一些方法可以使用一种称为动态规划的技术来提高算法的性能。在这种情况下,您可以记忆结果,这意味着在使用递归计算每个中间结果一次之后,将所有中间结果存储在查找表中。这使得通常需要指数时间才能在线性时间内完成的解决方案成为可能。下面是一个用JavaScript实现的示例:
将其与naive算法进行比较:
|
![]() |
2
3
原因是,要计算balls的值,只需要balls-1和balls-3的值,因此只需要跟踪以前的三个结果即可更新新结果。或者,您可以将其作为矩阵更新:
|
![]() |
3
1
从 link in the comments ,你可以找到这个方程:
|
![]() |
4
1
对于N个球,你可以拉0到地板(N/3)三个球。 对于N个球,你拉k个三人组,你也拉N-3k个单打。 现在问题被简化为计算一种类型的k个事物和另一种类型的N-3k个事物的不同排序方式。这是choose(k+N-3k,k)=choose(N-2k,k)。 最终答案是从k=0到choose(N-2k,k)的楼层(N/3)的和。
|
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |