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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值