一個\(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; }