一.在骰子游戏中,我们会有猜点数的问题。我们该如何用算法来描述呢?
加入我们当前只有一个骰子,我们该如何算概率呢?
我们现在开始推导一下吧:
首先是一个骰子的情况,我们可以简单的知道n个骰子一共可以掷出6^n种排列组合
一个骰子的情况:1 1 1 1 1 1
两个骰子的情况:0 1 2 3 4 5 6 5 4 3 2 1
三个骰子的情况:0 0 1 3 6 10....
此时我们的到了一个递推公式:
dp[i][j]=dp[i-1][j-1]+dp[i-1][j-2]+dp[i-1][j-3]+dp[i-1][j-4]+dp[i-1][j-5]+dp[i-1][j-6];(i-6>0);
二.我们来处理一下代码逻辑
int main() {
int n=5;
int m=30;
vector<vector<int>> res(n,vector<int>(m));
for(int i=0;i<6;i++) res[0][i]=1;
for(int i=1;i<n;i++){
for(int j=i;j<m&&j<6*(i+1);j++){
int temp=0;
for(int k=1;k<=6;k++)
if(k<=j) {
temp += res[i - 1][j - k];
}
res[i][j]=temp;
}
}
}