剣はオファー60-nダイスC ++のポイントを指します

タイトル説明

ここに画像の説明を挿入します

ソリューションdp

  1. dp配列
    dp [i] [j]の意味は、i個のサイコロの数jの鋳造方法の総数を表し、各サイコロは特殊であり、合計方法は6のn乗であることが保証されています。
  2. dp方程式
    dp [i] [j] = dp [i-1] [j-k] k <jおよびk∈[1,6](
    dp [3] [8] = dp [2] [2] + dp [ 2] [3]…dp [2] [7]
    dp [3] [3] = dp [2] [1] + dp [2] [2]
    3。初期値
    dp [1] [1] = dp [ 1] [2] =…dp [1] [6] = 14.
    最終結果
    dp [n] [n]、dp [n] [n + 1]、dp [n] [n +2]…dp [n] [6 * n]
class Solution {
    
    
public:
    vector<double> dicesProbability(int n) {
    
    
        //dp[i][j]:i个骰子投出数字为j的结果个数
        //dp[i][j] = dp[i - 1][j-k] k∈[1,6] 
        vector<double> ans(6 * n - n + 1, 0);
        vector<vector<int>> dp(n + 1,vector<int>(6 * n + 1, 0));
        
        for(int k = 1; k <= 6; k++) dp[1][k] = 1;
        
        for(int i = 2; i <= n; i++) {
    
    
            for(int j = i; j <= 6 * i; j++) {
    
    
                for(int k = 1; k <= 6 && k < j; k++) {
    
    
                    dp[i][j] += dp[i - 1][j - k];
                }
            }
        }
        int base = pow(6,n);
        for(int i = n; i <= 6*n ; i ++) ans[i - n] = dp[n][i] * 1.0 /base;
        return ans;
    }
};

ここに画像の説明を挿入します
時間計算量O(N ^ 2)
空間計算量O(N ^ 2)

おすすめ

転載: blog.csdn.net/qq_42883222/article/details/112667931