题目链接: 剑指offer
题目描述: 把n个骰子仍在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。
解题思路: 动态规划, dp(n, s) 表示扔第n个骰子, 和为s点数出现的次数。 dp(n, s) = dp(n-1, s-1) + dp(n-1, s-2) + ...... dp(n-1, s-6), 由于之和上一次有关, 所以我们只记录上一次的就值就可以了, 第一维大小就是2
代码:
#include#include using namespace std; int g_maxValue=6;void PrintProbability(int n){ if(n<1) return; int* pProbability[2]; pProbability[0]=new int[g_maxValue*n+1]; pProbability[1]=new int[g_maxValue*n+1]; for(int i=0;i<=g_maxValue*n;i++){ pProbability[0][i]=0; pProbability[1][i]=0; } int flag=0; for(int i=1;i<=g_maxValue;i++) pProbability[flag][i]=1; for(int k=2;k<=n;k++){ for(int i=0;i
思考: 剑指offer上的代码啊......真的是好漂亮......多学着点