检查N能否表示为从集合{A, B}中选择的整数之和(Python)
假设我们有一个目标数字。我们还有另外两个数字A和B。我们必须检查是否可以通过任意多次添加A和B来获得目标数字。
因此,如果输入像目标 = 26,A = 5,B = 7,则输出为True,因为我们可以通过添加A和B来获得26,例如 (7 + 7 + 7 + 5)。
为了解决这个问题,我们将遵循以下步骤:
- 定义一个函数util()。这将接收x、a、b、is_ok和target。
- 如果x > target,则
- 返回。
- 如果is_ok[x]为True,则
- 返回。
- is_ok[x] := True
- util(x + a, a, b, is_ok, target)
- util(x + b, a, b, is_ok, target)
- 在主方法中执行以下操作:
- is_ok := 一个大小为(target + 1)并填充False的数组
- util(0, a, b, is_ok, target)
- 返回is_ok[target]
示例
让我们看看下面的实现来更好地理解:
def util(x, a, b, is_ok, target): if x > target: return if is_ok[x]: return is_ok[x] = True util(x + a, a, b, is_ok, target) util(x + b, a, b, is_ok, target) def solve(target, a, b): is_ok = [False] * (target + 1) util(0, a, b, is_ok, target) return is_ok[target] target = 26 A = 5 B = 7 print(solve(target, A, B))
输入
26, 5, 7
输出
True
广告