LeetCode 1223. 掷骰子模拟(DP)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1223. 掷骰子模拟(DP)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
有一個骰子模擬器會每次投擲的時候生成一個 1 到 6 的隨機數。
不過我們在使用它時有個約束,就是使得投擲骰子時,連續 擲出數字 i 的次數不能超過 rollMax[i](i 從 1 開始編號)。
現在,給你一個整數數組 rollMax 和一個整數 n,請你來計算擲 n 次骰子可得到的不同點數序列的數量。
假如兩個序列中至少存在一個元素不同,就認為這兩個序列是不同的。
由于答案可能很大,所以請返回 模 10^9 + 7 之后的結果。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/dice-roll-simulation
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
類似題目:
LeetCode 1155. 擲骰子的N種方法(DP)
劍指Offer - 面試題60. n個骰子的點數(動態規劃)
- 樣本維度 i
- 狀態維度投出的是幾點(上一次,當前次)j,nj
- 投出的點,連續了幾次 k
288 ms 30.7 MB
class Solution:def dieSimulator(self, n: int, rollMax: List[int]) -> int:dp = [[[0 for i in range(16)] for i in range(6)] for i in range(n)]for j in range(6):dp[0][j][1] = 1for i in range(1,n):for j in range(6):for k in range(1,16):if dp[i-1][j][k]==0:continuefor nj in range(6):if nj==j and k+1 <= rollMax[j]:dp[i][nj][k+1] = (dp[i][nj][k+1]+dp[i-1][j][k])%1000000007if nj!=j:dp[i][nj][1] = (dp[i][nj][1]+dp[i-1][j][k])%1000000007;sum = 0for j in range(6):for k in range(1,16):sum = (sum+dp[n-1][j][k])%1000000007return sum2776 ms 30 MB
python這么慢嗎?😂總結
以上是生活随笔為你收集整理的LeetCode 1223. 掷骰子模拟(DP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 957. N 天后的牢
- 下一篇: LeetCode 1228. 等差数列中