Pythonでターゲットに到達するためのコインの組み合わせの数を見つけるプログラム
コインのリストと別の値の金額があるとすると、その合計から金額までの組み合わせの数を見つける必要があります。答えが非常に大きい場合は、結果を10 ^ 9+7で変更します。
したがって、入力がcoins =[2、5] amount =10の場合、これらの組み合わせを作成できるため、出力は2になります-[2、2、2、2、2]、[5、5]
これを解決するには、次の手順に従います-
- m:=10 ^ 9 + 7
- dp:=金額+1と同じサイズのリストで、0で埋めます
- dp [0]:=1
- コインのdごとに、
- 1からdpのサイズまでの範囲のiについては、
- i --d> =0の場合、
- dp [i]:=dp [i] + dp [i --d]
- i --d> =0の場合、
- 1からdpのサイズまでの範囲のiについては、
- return(dpの最後の要素)mod m
理解を深めるために、次の実装を見てみましょう-
例
class Solution: def solve(self, coins, amount): dp = [0] * (amount + 1) dp[0] = 1 for d in coins: for i in range(1, len(dp)): if i - d >= 0: dp[i] += dp[i - d] return dp[-1] % (10 ** 9 + 7) ob = Solution() coins = [2, 5] amount = 10 print(ob.solve(coins, amount))
入力
[2, 5], 10
出力
2
-
Pythonを使用してすべてのノードに到達するための頂点の最小数を見つけるプログラム
n個の頂点とノードに0からn-1までの番号が付けられた有向非巡回グラフがあるとします。グラフはエッジリストで表されます。ここで、edges [i] =(u、v)はノードuからノードv。グラフ内のすべてのノードに到達できる頂点の最小セットを見つける必要があります。 (頂点は任意の順序で返すことができます)。 したがって、入力が次のような場合 これらの2つの頂点は他のどの頂点からも到達できないため、出力は[0,2,3]になります。したがって、それらから開始すると、すべてをカバーできます。 これを解決するには、次の手順に従います- n:=エッジのサイズ all_nodes:=
-
Pythonでチェスの騎士が目標位置に到達するための最小ステップを見つけるプログラム
2つの値rとcがあるとします。チェスの騎士が無限に大きなチェス盤の最初の座標(0、0)に配置されている場合、その場所(r、c)に到達するために必要な最小移動回数を見つける必要があります。騎士はチェスと同じ動きのスタイルに従います。水平方向に2マス、縦に1マス、または縦に2マス、横に1マス移動します。 したがって、入力がr =6、c =1の場合、出力は3になります。赤は初期位置、緑は最終位置、黄色は中間ステップです。 これを解決するには、次の手順に従います- r