动态规划
使用dp[k][i]表示k个骰子时,点数和为i的组合数
则转移状态方程:
dp[k][i]=∑j=16dp[k−1][i−j]
void func(int n)
{
if (n < 1)
{
return;
}
vector<int> vec(n*6+1);
vector<vector<int>> dp(n+1,vec);
for (auto i = 1; i <= 6;i++)
{
dp[1][i] = 1;
}
for (auto k = 1; k < n; ++k)
{
for (auto i = k; i < 6*k+1; ++i)
{
for (auto j = 1; j <= 6; j++)
{
dp[k + 1][i + j] += dp[k][i];
}
}
}
int sum = accumulate(dp[n].begin(), dp[n].end(),0);
for (auto i = 0; i < 6 * n + 1;++i)
{
if (dp[n][i]!=0)
{
cout << i << " " << (double)dp[n][i] / (double)sum<<endl;
}
}
}