题目链接:https://cn.vjudge.net/contest/208908#problem/G
题目大意:给你一个n面的骰子,问你要投多少次使得搜右面都出现至少一次,求次数的期望。
题目解答:我们设dp[i]为出现i面所投的次数期望,可列出转移式为:dp[i]=(i-1)/n*dp[i-1]+(n-i+1)/n*dp[i]+1;
化简得dp[i]=dp[i-1]+n/(i-1); 其中dp[1]=1;
#include<math.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long ll;
#define eps 1e-8
double dp[100005];
int main(void)
{
int T,i,n,cases=0;
scanf("%d",&T);
while(T--)
{
dp[1]=1;
scanf("%d",&n);
for(i=2;i<=n;i++)
dp[i]=dp[i-1]+(double)n/(double)(i-1);
printf("Case %d: %.7f\n",++cases,dp[n]);
}
return 0;
}