# Program to find number of sets of k-non-overlapping line segments in Python

Suppose we have n points on a line, where the ith point (from 0 to n-1) is at position x = i, we have to find the number of ways we can draw exactly k different non-overlapping line segments such that each segment covers two or more points. The endpoints of each line segment must have integral coordinates. The k line segments do not have to cover all given n points, and they can share endpoints. If the answer is too large, then return result mod 10^9+7.

So, if the input is like n = 4 k = 2, then the output will be 5 because we can make five possibilities [(0 to 2),(2 to 3)], [(0 to 1),(1 to 3)], [(0 to 1),(2 to 3)], [(1 to 2),(2 to 3)] and [(0 to 1),(1 to 2)]

To solve this, we will follow these steps −

• m := 10^9 + 7
• n := n - 1
• Define a function dp() . This will take i, covered, j
• if i is same as n, then
• return true if j is same as k otherwise false
• if j > k, then
• ans := dp(i + 1, False, j) + dp(i + 1, True, j + 1)
• if covered is true, then
• ans := ans + dp(i + 1, True, j)
• return ans mod m
• From the main method return dp(0, False, 0)

## Example

Let us see the following implementation to get better understanding −

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))

## Input

4, 2

## Output

5