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

Pythonでインドの宗派を使用してnR.sを取得できる方法の数を見つけるためのプログラム


金種の硬貨が限られているとします(1ポンド、2ポンド、5ポンド、10ポンド)。合計で合計£nになる方法をいくつ見つける必要がありますか?サイズ4の配列カウントがあります。ここで、count [0]は1ポンドのコインを示し、count[1]は2ポンドのコインを示します。

したがって、入力がn =25 count =[7,3,2,2]の場合、出力は9になります。

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

  • denom:=[1,2,5,10]
  • A:=サイズ(n + 1)の配列で、0で埋めます
  • B:=Aからの新しいリスト
  • 0から(count [0]およびnの最小値)の範囲のiの場合、do
    • A [i]:=1
  • 1〜3の範囲のiについては、
    • 範囲0からcount[i]のjの場合、実行
      • 0〜n +1の範囲のkの場合-j*denom [i]、do
        • B [k + j * denom [i]]:=B [k + j * denom [i]] + A [k]
    • 0からnの範囲のjについては、
      • A [j]:=B [j]
      • B [j]:=0
  • return A [n]

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

denom = [1,2,5,10]
def solve(n, count):
   A = [0] * (n + 1)
   B = list(A)
   for i in range(min(count[0], n) + 1):
      A[i] = 1
   for i in range(1, 4):
      for j in range(0, count[i] + 1):
         for k in range(n + 1 - j *denom[i]):
            B[k + j * denom[i]] += A[k]
      for j in range(0, n + 1):
         A[j] = B[j]
         B[j] = 0
   return A[n]

n = 25
count = [7,3,2,2]
print(solve(n, count))

入力

25, [7,3,2,2]

出力

9

  1. PythonのAjobシーケンスからシーケンスを選択する方法の数を見つけるためのプログラム

    Ajob言語と呼ばれる奇妙な言語があるとします。文字数は無限です。私たちはこの言語でn語を知っています。最初の単語は1文字の長さで、2番目の単語は2文字の長さというように続きます。そして、単語内のすべての文字は一意です。 n個の単語のいずれかを選択し、そこからサブシーケンスを形成するとします。サブシーケンスの長さは、元の単語の長さよりk短くする必要があります。たとえば、選択した単語の長さがLの場合、サブシーケンスの長さは(L --k)になります。長さがkより小さい単語がある場合は、その単語を選択しないでください。また、2つのサブシーケンスは、長さが異なる場合、または同じ位置に異なる文字が含まれ

  2. 可能なBSTの数を見つけるプログラムは、Pythonのn個の異なるノードを使用して生成できます

    数nがあるとします。 [1,2、...、n]のような数がある場合、これらのn個の値を使用して形成できるBSTの数を数える必要があります。答えが大きすぎる場合は、結果を10 ^ 9+7で変更します。 したがって、入力がn =3の場合、出力は14になります。 これを解決するために、次の手順に従います a:=値が[0、1]のリスト m:=10 ^ 9 + 7 max_n:=1000 2からmax_n+1の範囲のkについては、 (1 +リストのすべての要素の合計(a [i] * a [k --i] for all i in range(1、k)))modmをaの最後に挿入します