读书人

把N个骰子扔在地下所有骰子朝下一面

发布时间: 2012-10-12 10:17:04 作者: rapoo

把N个骰子扔在地上,所有骰子朝上一面的和为s,输入n,打印出s所有可能的值出现的概率

思路:这是一道动态规划的题目,而动态规划最难的就是要找出最优子结构,并采取一种称为备忘录的方法避免重复计算。

F(k,n)表示k个骰子点数和为n的种数,k表示骰子个数,n表示k个骰子的点数和

F(k,n)=F(k-1,n-6)+F(k-1,n-5)+...+F(k-1,n-1)

当k=1时

F(1,1)=F(1,2)....F(1,6)=1

参考代码如下

public void printSumProbality(int number){int[]psum=new int[6*number+1];double total=Math.pow(6, number);int size=6*number;int i,j,k;for(i=1;i<=6;i++)psum[i]=1;for(i=2;i<=number;i++){for(j=i*6;j>=i;j--){for(k=1;k<=6 && j>k;k++){psum[j]+=psum[j-k];}}for(j=i-1;j>=0;j--){psum[j]=0;}}for(i=0;i<=size;i++){System.out.println("sum="+i+"p="+(psum[i]/total));}}public static void main(String[] args){FindProbability find=new FindProbability();find.printSumProbality(4);}


读书人网 >其他相关

热点推荐