0
点赞
收藏
分享

微信扫一扫

算法训练 印章(c++)

Raow1 2022-02-24 阅读 50

资源限制

时间限制:1.0s   内存限制:256.0MB

问题描述

  共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率。

输入格式

  一行两个正整数n和m

输出格式

  一个实数P表示答案,保留4位小数。

样例输入

2 3

样例输出

0.7500

数据规模和约定

  1≤n,m≤20

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n, m;
	cin>>n>>m;
	double p = 1.0/n;
	vector<vector<double> > dp(n+1,vector<double>(m+1,0));

	for ( int i = 1; i <= n; i++ ) {
		for ( int j = 1; j <= m; j++ ) {
			//if ( j <  i ) dp[i][j] = 0;
			if ( i == 1 ) {
				dp[i][j] = pow (p, j-1);  //p^(i-1)
			}
			else {
				dp[i][j] = dp[i][j-1] * (i*1.0/n) + dp[i-1][j-1] * ((n-i+1)*1.0/n);
			}
		}
	}
	printf("%.4f",dp[n][m]);
	return 0;
}
举报

相关推荐

0 条评论