Randomized Fibonacci (HihoCoder-1164) desired 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

Meaning of the questions: I believe you are familiar with the Fibonacci columns: a0 = 1, a1 = 1 , ai = ai-1 + ai-2, (i> 1). Consider now the Fibonacci numbers generated columns: a0 = 1, ai = aj + ak, integer i> 0, j, k from [0, i-1] selected at random (j and k independently). Now given n, required to obtain E (an), i.e., a series of possible in an expected value.
Thinking: a [i] = a [ j] + a [k], j and k are independent variables (the amount of change will not cause a change amount of the other except for the dependent variable), j and k can take the [0, i-1] in any one of the, sum and various values of j and k, i is the average value after the dividing by the (desired).

AC Code:

#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;
}

 

Published 212 original articles · won praise 18 · views 20000 +

Guess you like

Origin blog.csdn.net/weixin_43846139/article/details/104068243