Pythonのターゲット合計を持つダイスロールの数
d個のサイコロがあり、各サイコロに1、2、...、fの番号が付けられたf個の面があるとします。サイコロを振るには、10 ^ 9 + 7を法として(fdの合計ウェイのうち)可能なウェイの数を見つけて、表向きの数字の合計がターゲットと等しくなるようにする必要があります。したがって、入力がd =2、f =6、target =7の場合、出力は6になります。したがって、6つの面を持つ各サイコロを投げる場合、合計6を1+6として取得する6つの方法があります。 2 + 5、3 + 3、4 + 3、5 + 2、6+1。
これを解決するには、次の手順に従います-
- m:=1e9 + 7
- 次数dx(t + 1)のテーブルdpを作成し、これに0を入力します
- 0からd–1の範囲のiの場合
- 0からtの範囲のjの場合
- i =0の場合、jが1からfの範囲にある場合はdp [i、j]:=1、それ以外の場合は0
- それ以外の場合
- 1からfの範囲のlの場合
- j – l> 0の場合、dp [i、j]:=dp [i、j] + dp [i – 1、j --l]、およびdp [i、j]:=dp [i、 j] mod m
- 1からfの範囲のlの場合
- 0からtの範囲のjの場合
- return dp [d – 1、t] mod m
理解を深めるために、次の実装を見てみましょう-
class Solution(object): def numRollsToTarget(self, d, f, t): mod = 1000000000+7 dp =[[0 for i in range(t+1)] for j in range(d)] for i in range(d): for j in range(t+1): if i == 0: dp[i][j] = 1 if j>=1 and j<=f else 0 else: for l in range(1,f+1): if j-l>0: dp[i][j]+=dp[i-1][j-l] dp[i][j]%=mod return dp [d-1][t] % mod ob = Solution() print(ob.numRollsToTarget(2,6,7))
入力
2 6 7
出力
6
-
Pythonで合計がkであるパスの数をカウントするプログラム
二分木と別の値kがあるとすると、合計がkになるサブ子パスへの一意のノードの数を見つける必要があります。 したがって、入力が次のような場合 k =5の場合、パスは[2、3]と[1、4] であるため、出力は2になります。 これを解決するには、次の手順に従います- count:=マップは最初にキー0の値1を保持します ans:=0、プレフィックス:=0 関数dfs()を定義します。これはノードを取ります ノードがnullでない場合、 プレフィックス:=プレフィックス+ノードの値 ans:=ans +(count [prefix --target]、これが利用できない場合は0にな
-
Pythonプログラムで数の偶数因子の合計を見つける
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −数値が与えられているので、数値のすべての偶数因子の合計を表示する必要があります。 アプローチ 数値が奇数かどうかを確認し、偶数の因子がないため、0を返します。 数が偶数の場合、計算を実行します。 20を除く他のすべての項は、偶数の因数の合計を生成するために乗算されます。 偶数因子のすべての奇数を削除するために、1である20を無視します。このステップの後、偶数因子のみを取得しました。 2は私たちが利用できる唯一の素数であることに注意してください。 次に、以下の実装を見てみましょう- 例 # math