试题 算法训练 印章
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率。
输入格式
一行两个正整数n和m
输出格式
一个实数P表示答案,保留4位小数。
样例输入
2 3
样例输出
0.7500
数据规模和约定
1≤n,m≤20
代码:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int numN,numM;
cin>>numN>>numM;
double dp[20][20];
for (int i = 0; i < numM; ++i) {
dp[i][0] = pow(1/(double )numN,i);
}
for (int i = 0; i < numM; ++i) {
for (int j = 1; j < numN; ++j) {
if (i < j){
dp[i][j] = 0;
}
else {
dp[i][j] = dp[i-1][j-1] * ((double )(numN-j)/(double )(numN)) + dp[i-1][j] * ((double )(j+1)/(double )numN);
}
}
}
printf("%.4lf",dp[numM-1][numN-1]);
return 0;
}