Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでk個の重複しない線分のセットの数を見つけるプログラム


線上にn個の点があり、i番目の点(0からn-1まで)が位置x =iにあるとすると、それぞれがセグメントは2つ以上のポイントをカバーします。各線分の端点は、整数の座標を持っている必要があります。 k線分は、指定されたn点すべてをカバーする必要はなく、端点を共有できます。答えが大きすぎる場合は、結果mod 10 ^ 9+7を返します。

したがって、入力がn =4 k =2の場合、5つの可能性を作成できるため、出力は5になります[(0から2)、(2から3)]、[(0から1)、(1から3)]、[(0 to 1)、(2 to 3)]、[(1 to 2)、(2 to 3)]および[(0 to1)、(1 to 2)]

これを解決するには、次の手順に従います-

  • m:=10 ^ 9 + 7
  • n:=n-1
  • 関数dp()を定義します。これには、i、covered、jが必要です
  • iがnと同じ場合、
    • jがkと同じ場合はtrueを返し、それ以外の場合はfalseを返します
  • j> kの場合、
  • ans:=dp(i + 1、False、j)+ dp(i + 1、True、j + 1)
  • カバーされている場合は、
    • ans:=ans + dp(i + 1、True、j)
  • return ans mod m
  • メインメソッドからdp(0、False、0)を返します

理解を深めるために、次の実装を見てみましょう-

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. リスト内の最小数を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが表示されます。リストで利用可能な最小の番号を表示する必要があります ここでは、リストを並べ替えて最小の要素を取得するか、組み込みのmin()関数を使用して最小の要素を取得できます。 次に、以下の実装の概念を観察しましょう- 例 list1 = [101, 120, 104, 145, 99] # sorting using built-in function list1.sort() print("Smallest element is:", list1[0]) 出力 Smal

  2. Pythonプログラムで数の偶数因子の合計を見つける

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −数値が与えられているので、数値のすべての偶数因子の合計を表示する必要があります。 アプローチ 数値が奇数かどうかを確認し、偶数の因子がないため、0を返します。 数が偶数の場合、計算を実行します。 20を除く他のすべての項は、偶数の因数の合計を生成するために乗算されます。 偶数因子のすべての奇数を削除するために、1である20を無視します。このステップの後、偶数因子のみを取得しました。 2は私たちが利用できる唯一の素数であることに注意してください。 次に、以下の実装を見てみましょう- 例 # math