在Python中查找k-非重叠线段集数的程序
假设我们在一条线上有n个点,其中第i个点(从0到n-1)位于位置x=i,我们必须找到可以精确绘制k个不同的非重叠线段的方法的数量,使得每个段涵盖两个或更多点。每条线段的端点必须具有积分坐标。k条线段不必覆盖所有给定的n个点,它们可以共享端点。如果答案太大,则返回结果mod10^9+7。
所以,如果输入像n=4k=2,那么输出将是5,因为我们可以有五种可能性[(0to2),(2to3)],[(0to1),(1to3)],[(0to1),(2to3)],[(1to2),(2to3)]和[(0to1),(1to2)]
示例
让我们看看以下实现以获得更好的理解-
def solve(n, k):
m = 10 ** 9 + 7
n -= 1
def dp(i, covered, j):
if i == n:
return j == k
if j > k:
return 0
ans = dp(i + 1, False, j) + dp(i + 1, True, j + 1)
if covered:
ans += dp(i + 1, True, j)
return ans % m
return dp(0, False, 0)
n = 4
k = 2
print(solve(n, k))输入
4, 2输出结果
5
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下