JZOJ 3477 【NOIP2013提高组初赛问题求解第二题模拟】

版权声明:转载无所谓的。。。 https://blog.csdn.net/xuxiayang/article/details/82809638

大意

n n 片荷叶在池塘上。因为如此这般,有一只年轻的青蛙要在荷叶上跳。它是这样跳的:假如它在第i 号荷叶上,那么它等概率地跳到1 到i 号的荷叶中的一个,跳到1 号荷叶结束。求这只青蛙期望跳多少次结束。


思路

f [ i ] f[i] 表示 i i 片荷叶时的期望,可以发现
f [ 1 ] = 1 f[1]=1 (实际是0,在这里为了方便递推采用1)
f [ 2 ] = 1 + f [ 1 ] 2 1 = 1 + 1 = 2 f[2]=1+\frac{f[1]}{2-1}=1+1=2
f [ 3 ] = 1 + f [ 1 ] + f [ 2 ] 3 1 = 1 + 3 2 = 2.5 f[3]=1+\frac{f[1]+f[2]}{3-1}=1+\frac{3}{2}=2.5
f [ 4 ] = 1 + f [ 1 ] + f [ 2 ] + f [ 3 ] 4 1 = 1 + 5.5 3 2.83 f[4]=1+\frac{f[1]+f[2]+f[3]}{4-1}=1+\frac{5.5}{3}\approx2.83
……

f [ i ] = 1 + j = 1 i 1 f [ j ] i 1 f[i]=1+\frac{\sum_{j=1}^{i-1}f[j]}{i-1}

注意:当 i = = 1 i==1 时要特判


代码

#include<cstdio>
using namespace std;double f[20001],s;int n;
signed main()
{
	scanf("%d",&n);
	if(n==1) return printf("0.00")&0;//特判
	f[1]=1;s=1;
	for(register int i=2;i<=n;i++)
	{
		f[i]=1+s/(i-1);//动态转移
		s+=f[i];//s为前缀和
	}
	printf("%.2lf",f[n]);//输出
}

猜你喜欢

转载自blog.csdn.net/xuxiayang/article/details/82809638