书上的动态规划解法用了两个数组,尝试用一个数组写了一下。
#define NUM 6
void Probability(int n) //动态规划
{
if(n<1)
return;
int total = (int)pow(NUM*1.0,n);
int* count = new int[n*NUM+1];
memset(count,0,sizeof(int)*(n*NUM+1));
for(int i=1;i<=NUM;i++)
count[i] = 1;
for(int k=2;k<=n;k++)
{
for(int i=k*NUM;i>=k;i--) //从后往前计算
{
int temp = 0;
for(int j=1;j<=NUM&&j<=i;j++)
temp += count[i-j];
count[i] = temp;
}
count[k-1] = 0; //k个骰子 0到k-1为0 0到k-2已为0
}
for(int i=n;i<=n*NUM;i++)
cout<<i<<"\t"<<(double)count[i]/total<<endl;
delete []count;
}