題目鏈接:https://leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof
思路:
首先可以確定,暴力很難過這個題。
我們假設:對於某點數 x,這 n 個骰子可以有 y 種方案數來形成。
那麼每種 x 點數的出現概率其實是:
所以我們要做的就是計算出每種點數的 y。
我們可以用 dp 來解決這個問題
表示使用 個骰子,形成點數和爲 的方案數
那麼狀態轉移方程:,其中 就是點數,顯然是 1 ~ 6.
但是我們知道,骰子是沒有點數 0 的,
所以上狀態轉移方程就變成了
Code:
class Solution {
public:
vector<double> twoSum(int n) {
double base = 1.000;
for(int i = 1;i <= n;++ i) base *= 1.0 / 6;
memset(dp,0,sizeof(dp));
dp[0][0] = 1;
for(int i = 1;i <= n;++ i) {
for(int j = 1;j <= 6 * n;++ j) {
for(int k = 1;k <= 6;++ k) {
if(j >= k) dp[i][j] += dp[i - 1][j - k];
}
}
}
vector<double> v;
for(int i = n;i <= 6 * n;++ i) {
v.push_back(dp[n][i] * base);
}
return v;
}
int dp[15][110];
};