一尘不染

获取获得一定分数N所需的(美国)足球积分累积的所有组合的算法

algorithm

这是我的面试问题之一,我想不出获得N号的好方法。(此外,我也不了解美式足球计分系统)

6 points for the touchdown
1 point for the extra point (kicked)
2 points for a safety or a conversion (extra try after a touchdown)
3 points for a field goal

什么是一种有效的算法,以获得获得一定分数N所需的点累积的 所有 组合?


阅读 229

收藏
2020-07-28

共1个答案

一尘不染

假设在这里,您正在寻找一种获取可能性的数量而不是实际可能性的方法。

首先让我们找到一个 递归函数

f(n) = (f(n-6) >= 0? f(n-6) : 0) + (f(n-1) >= 0 ? f(n-1) : 0) + (f(n-2) >= 0 ? f(n-2) : 0) + (f(n-3) >= 0 ? f(n-3) : 0)

基数:f(0) = 1f(n) = -infinity [n<0]

其背后的想法是:您总是可以0通过无计分游戏进入。如果可以到达f(n-6),您还可以到达f(n),依此类推。

使用上述公式可以轻松创建递归解决方案。

请注意,您甚至可以使用它进行 动态编程
,使用[-5,n]初始化表,init f[0] = 0f[-1] = f[-2] = f[-3] = f[-4] = f[-5] = -infinity对索引[1,n]进行迭代,以根据上述递归公式获得多种可能性。

编辑:
我刚刚意识到上述公式的简化版本可能是:
f(n) = f(n-6) + f(n-1) + f(n-2) + f(n-3)
并且基数将是:f(0) = 1f(n) = 0 [n<0]
这两个公式将产生完全相同的结果。

2020-07-28