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
-
リスト内の最小数を見つけるPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが表示されます。リストで利用可能な最小の番号を表示する必要があります ここでは、リストを並べ替えて最小の要素を取得するか、組み込みのmin()関数を使用して最小の要素を取得できます。 次に、以下の実装の概念を観察しましょう- 例 list1 = [101, 120, 104, 145, 99] # sorting using built-in function list1.sort() print("Smallest element is:", list1[0]) 出力 Smal
-
Pythonプログラムで数の偶数因子の合計を見つける
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −数値が与えられているので、数値のすべての偶数因子の合計を表示する必要があります。 アプローチ 数値が奇数かどうかを確認し、偶数の因子がないため、0を返します。 数が偶数の場合、計算を実行します。 20を除く他のすべての項は、偶数の因数の合計を生成するために乗算されます。 偶数因子のすべての奇数を削除するために、1である20を無視します。このステップの後、偶数因子のみを取得しました。 2は私たちが利用できる唯一の素数であることに注意してください。 次に、以下の実装を見てみましょう- 例 # math