资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率。
输入格式
一行两个正整数n和m
输出格式
一个实数P表示答案,保留4位小数。
样例输入
2 3
样例输出
0.7500
数据规模和约定
1≤n,m≤20
思路:
设置m行n列的dp数组,dp[i][j]表示抽取i次仅获得j种印章的概率。
易知:当抽取i次仅有随机一种章的概率为[(1/n)^i]*n
抽取此数小于欲获得种类数时(即i<j时)dp[i][j]=0
当不属于以上特殊情况时:
抽取i次仅获得j种印章的概率为:已抽得j种的基础上再抽中其中j种中的一种的概率 加上 已抽中j-1种的基础上再抽中已有j-1种以外的随机一种的概率。
即dp[i][j]=dp[i-1][j]*(j/n)+dp[i-1][j-1]*(1-(j-1)/n)
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
int main(){
double n