LightOJ 1248 Dice (III)

来源:互联网 发布:一彩软件 编辑:程序博客网 时间:2024/05/01 22:23

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26958 


题意:有一个n面的骰子,每次投掷每个面都是等概率出现,求所有面都出现的期望投掷次数。


思路:f[i]表示已经出现了i个面,还需要投掷的期望次数,f[n] = 0 , f[i] = i/n * f[i] + ( n - i ) / n * f[i+1]  + 1 , 化简后f[i] = f[i+1] + n / ( n - i ) , 所以答案就是∑n/i 1<=i<=n。


#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <cstdlib>#include <iostream>#include <algorithm>#include <stack>#include <map>#include <set>#include <vector>#include <sstream>#include <queue>#include <utility>using namespace std;#define rep(i,j,k) for (int i=j;i<=k;i++)#define Rrep(i,j,k) for (int i=j;i>=k;i--)#define Clean(x,y) memset(x,y,sizeof(x))#define LL long long#define ULL unsigned long long#define inf 0x7fffffff#define mod %100000007int T;int n;int k = 0;void solve(){    double ans = 0;    rep(i,1,n) ans+=(double)n/i;    printf("Case %d: %0.9f\n",++k,ans);}int main(){    cin>>T;    while(T--)    {        scanf("%d",&n);        solve();    }    return 0;}


0 0
原创粉丝点击