LeetCode 1155.擲骰子的N種方法

題目描述

這里有 d 個一樣的骰子,每個骰子上都有 f 個面,分別標號為 1, 2, ..., f。
我們約定:擲骰子的得到總點數(shù)為各骰子面朝上的數(shù)字的總和。
如果需要擲出的總點數(shù)為 target,請你計算出有多少種不同的組合情況(所有的組合情況總共有 f^d 種),模 10^9 + 7 后返回。

題目解析

這是一個典型的動態(tài)規(guī)劃問題,得到狀態(tài)轉移方程,dp[i][j] = sum(dp[i-1][j-1], dp[i-1], [j-2], ..., dp[i-1][j-k]), 其中i表示為投擲骰子的個數(shù),j為投擲得到的總點數(shù),k為骰子的面數(shù)。

C++代碼

    int numRollsToTarget(int d, int f, int target) {
        int mod = 1000000007;
        int dp[31][1001];
        memset(dp, 0, sizeof(dp));
        //邊界起點初始化
        int minX = min(f, target);
        for(int i = 1; i <= minX; i++) {
            dp[1][i] = 1;
        }
        //進行順推過程
        for(int i = 2; i <=d; i++) {
            for(int j = i; j <= i*f; j++) {
                for(int k = 1; k<=f&&j>=k; k++) {
                    dp[i][j] += dp[i-1][j-k];
                    dp[i][j] %= mod;
                }
            }
        }

        return dp[d][target];
    }
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,081評論 0 2
  • 0x50「動態(tài)規(guī)劃」例題 幾點總結1 DP三要素:狀態(tài),階段,決策。具體地講,若DP時是雙重循環(huán),第一重循環(huán)通常表...
    云中翻月閱讀 2,367評論 2 4
  • 忘光了概率統(tǒng)計的知識還想學樸素貝葉斯算法?這一篇就是為你準備的。雖然如此,作為初學者,別指望 5 分鐘就能完全理解...
    kamidox閱讀 2,923評論 4 7
  • 樹形動態(tài)規(guī)劃,顧名思義就是樹+DP,先分別回顧一下基本內容吧:動態(tài)規(guī)劃:問題可以分解成若干相互聯(lián)系的階段,在每一個...
    Mr_chong閱讀 1,609評論 0 2
  • 婆婆早年是小學老師,教數(shù)學,曾當過腦殘叔的班主任。腦殘叔說,小時候他很怕婆婆,因為婆婆總是很兇,經(jīng)常因為他調皮而打...
    丟了朵朵閱讀 761評論 4 7

友情鏈接更多精彩內容