import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
double p=1.0/n;
double[][] dp=new double[m+1][n+1];
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++){
if(i<j){
//i<j时,不可能凑齐
dp[i][j]=0;
}else if(j==1){
//j=1,买了i张凑齐j种,dp=p的i-1次方
dp[i][j]=Math.pow(p, i-1);
}else{
dp[i][j]=dp[i-1][j]*(j*p)+dp[i-1][j-1]*((n-j+1)*p);
}
}
}
System.out.printf("%.4f",dp[m][n]);
}
}
参考:蓝桥杯试题 算法训练 印章 (dp&详解)_m0_58245389的博客-CSDN博客