Randomized Fibonacci (HihoCoder-1164)期望DP

Consider the following way to generate a new "randomized" fibonacci sequence.

a0 = 1, ai = aj + ak, i > 0, j and k are picked randomly from all integers in the interval [0, i-1] (j and k are independent).

Now given n, among all the posibilities of the final sequence of length n, what is the expectation of an?

Input

One line with an integer n.

Output

One line with an float number representing the answer. The answer will be considered right if it has a relative or absolute error which is less than 10-6 to the standard answer.

Sample Input

2

Sample Output

3.000000

题意:大家对斐波那契数列想必都很熟悉:a0 = 1, a1 = 1, ai = ai-1 + ai-2,(i > 1)。现在考虑如下生成的斐波那契数列:a0 = 1, ai = aj + ak, i > 0, j, k从[0, i-1]的整数中随机选出(j和k独立)。现在给定n,要求求出E(an),即各种可能的a数列中an的期望值。
思路:a[i] = a[j] + a[k] ,j和k是独立变量(一个量改变不会引起除因变量以外的其他量的改变),j和k都可以取[0, i-1]里的任意一个,sum为j和k各种取值的和,之后再除以i即为平均值(期望)。

AC代码:

#include <stdio.h>
#include <string>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <iomanip>
const int maxx=1010;
const int inf=0x3f3f3f3f;
using namespace std;
double a[maxx];
int main()
{
    int n;
    cin>>n;
    memset(a,0,sizeof(a));
    a[0]=1;
    a[1]=2;
    for(int i=2;i<=500;i++)
    {
        double sum=0;
        for(int j=0;j<i;j++)
        {
            sum+=2*a[j];
        }
        a[i]=sum/i;
    }
    cout<<fixed<<setprecision(6)<<a[n]<<endl;
    return 0;
}
发布了212 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43846139/article/details/104068243