问题描述
共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率。
输入格式
一行两个正整数n和m
输出格式
一个实数P表示答案,保留4位小数。
样例输入
2 3
样例输出
0.7500
数据规模和约定
1≤n,m≤20
没完全弄懂。。。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
import javax.rmi.ssl.SslRMIClientSocketFactory;
public class Main {
public static void main(String[] args) {
double [][]dp=new double[21][21];
int i,j,n,m;
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
double t=1/(double)n;
//dp[i][j]表示抽取i次仅获得j种印章的概率。
//共有n种图案的印章 小A买了m张印章
for(i=0;i<m;i++) dp[i][0]=Math.pow(t,(double)i);
for(i=1;i<n;i++) dp[0][i]=0;
for(i=1;i<m;i++){
for(j=1;j<n;j++) dp[i][j]=dp[i-1][j]*(((double)j+1)*t)+dp[i-1][j-1]*(1-(double)j*t);
//由于i与j为角标,所以带入推理出来的公式时i,j要+1
}
String ans=String.format("%.4f", dp[m-1][n-1]);
System.out.println(ans);
}
}