#include<stdio.h>
#include<math.h>
int main(){
int n,m,i,j;
double a[25][25],p;
scanf("%d%d",&n,&m);
p=1.0/n;
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
if(i<j) a[i][j]=0;
if(j==1){//凑齐1张的情况,所以是pow(p,i),又因为有n种,又要乘上n
a[i][j]=pow(p,i-1);
}
else{
a[i][j]=a[i-1][j]*(j*1.0/n)+a[i-1][j-1]*((n-j+1)*1.0/n);
//分最后一张是否重复的情况,第i-1前的都凑好了,第i张就算前面的已经取得印章
//第i-1前的还差一张凑齐,第i张就要凑齐最后一张
}
}
}
printf("%.4f",a[m][n]);
return 0;
}
//动态规划问题 dp[i][j],i表示买了i张,凑齐了j种印章,
本人小白一枚,有错误的地方还望大佬指点。