hihocoder 随机斐波那契(期望,水题)

大家对斐波那契数列想必都很熟悉:

a= 1, a= 1, a= ai-1 + ai-2,(i > 1)。

现在考虑如下生成的斐波那契数列:

a= 1, a= a+ ak, i > 0, j, k从[0, i-1]的整数中随机选出(j和k独立)。

现在给定n,要求求出E(an),即各种可能的a数列中an的期望值。

输入

一行一个整数n,表示第n项。(1<=n<=500)

输出

一行一个实数,表示答案。你的输出和答案的绝对或者相对误差小于10-6时被视为正确答案。

样例解释

共存在3种可能的数列

1,2,2  1/4

1,2,3  1/2

1,2,4  1/4

所以期望为3。


样例输入
2
样例输出
3.000000
思路:

ans[i] = ans[j] + ans[k] ,j和k是独立变量(一个量改变不会引起除因变量以外的其他量的改变),j和k都可以取[0, i-1]里的任意一个,sum为j和k各种取值的和,之后再除以i即为平均值(期望)。

http://hihocoder.com/problemset/problem/1164

[cpp]  view plain copy print ?
  1. #include <iostream>  
  2. #include <iomanip>   
  3. using namespace std;    
  4. double ans[555]={0};  
  5. int n;   
  6. int main(){  
  7.     cin>>n;  
  8.     ans[0]=1;  
  9.     ans[1]=2;  
  10.     for(int i=2;i<=500;i++)  
  11.     {  
  12.         double sum=0;  
  13.         for(int j=0;j<i;j++)  
  14.             sum+=2*ans[j];  
  15.         ans[i]=sum/i;  
  16.     }  
  17.     cout<<fixed<<setprecision(6)<<ans[n]<<endl;  
  18.     return 0;  
  19. }  

你可能感兴趣的:(hihocoder 随机斐波那契(期望,水题))