一个\(n(n \leq 1000)\)面的骰子,求指望掷几回能使得每一面都被掷到。spa
输入样例#1:code
2 1 12
输出样例#1:io
1.00 37.24
思路:指望\(dp\)中典型的赠券收集问题,用f[i]表示还剩i个面没有掷到,那么掷到以前没有掷到过的面的几率为\((n-i)/n\),而后次数的指望值就是几率分之一,而后进行逆向\(dp\)便可。class
代码:di
#include<cstdio> #define dl double dl f[1007]; int n,t; int main() { scanf("%d",&t); while(t--) { scanf("%d",&n); f[n]=0; for(int i=n-1;i>=0;--i) f[i]=f[i+1]+(n/(n-(double)i)); printf("%0.2lf\n",f[0]); } return 0; }