ダイスロールでターゲット和コインの変更のLeetCode 1155数2

ここでのオリジナルタイトルリンク:https://leetcode.com/problems/number-of-dice-rolls-with-target-sum/

トピック:

あなたは持っている  d サイコロを、各ダイはしている  f 面が、番号  1, 2, ..., f

(のうちの可能な方法の数を返し  fd 合計方法)モジュロ  10^9 + 7 番号対等アップ顔の合計ので、サイコロを転がしします  target

 

例1:

入力:D = 1、F = 6、ターゲット= 3 
出力:1 
説明:
あなたは6面を有する1個のダイスを投げます。3の合計を取得する唯一の方法があります。

例2:

入力:D = 2、F = 6、ターゲット= 7 
出力:6 
説明:
あなたは2個のダイス、6面を有するそれぞれを投げます。:7の合計を取得するための6つの方法があり
+ 6 1、+ 5 2、+ 3,4 + 3 4、+ 2 5、6 + 1。

例3:

入力:D = 2、F = 5、ターゲット= 10 
出力:1つの
説明:
あなたは2個のダイス、5つの顔とそれぞれを投げます。5 + 5:10の合計を取得する唯一の方法があります。

例4:

入力:D = 1、F = 2、ターゲット= 3 
出力:0 
説明:
あなたは2面を有する1個のダイスを投げます。3の合計を取得する方法はありません。

例5:

入力:D = 30、F = 30、ターゲット= 500 
出力:222616187 
説明:
答えは剰余^ 9 10 + 7を返さなければなりません。

制約:

  • 1 <= d, f <= 30
  • 1 <= target <= 1000

ソリューション:

[k]は、ターゲットkを作るための方法を示してDPましょう。

各ダイスのために、[1、F]内の値jが存在し得ます。DP [K - j]が新しい値にaccumlatedされます。

DPのすべての元の値を必要とする新しい値は、ので、ここで我々は一時を必要としています。

時間計算:O(D * F *対象)。

スペース:O(ターゲット)。

ACのJava:

1  クラスソリューション{
 2      公共 INT numRollsToTarget(int型 D、INT F、int型のターゲット){
 3          int型 MOD =十億七4          INT [] DP = 新しい INT [ターゲット+ 1 ]。
5          DP [0] = 1 ;
6          
7          INT iは= 0; I <Dは、I ++ ){
 8              INT [] TEMP = 新しい INT [ターゲット+ 1 ]。
9              INT J <= F; J = 1 J ++){
 10                  のためにINT K <=ターゲット; K = J K ++ ){
 11                      温度[K] =(温度[K] + DP [K - J])%のMOD。 
12                  }
 13              }
 14              
15              DP = TEMP。
16          }
 17          
18          戻りDP [ターゲット]。
19      }
 20 }

同様のコインの変更2

おすすめ

転載: www.cnblogs.com/Dylan-Java-NYC/p/12196018.html
おすすめ