zoukankan      html  css  js  c++  java
  • #1164 : 随机斐波那契

    描述

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

    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的期望值。

    输入

    一行一个整数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

    f[i]=∑∑f[i]+f[j]
    倒腾一下f[i]=(∑f[j]*2*i)/(i*i)
    #include<cstdio>
    #include<cctype>
    #include<queue>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    #define rep(i,s,t) for(int i=s;i<=t;i++)
    #define dwn(i,s,t) for(int i=s;i>=t;i--)
    #define ren for(int i=first[x];i!=-1;i=next[i])
    using namespace std;
    inline int read() {
        int x=0,f=1;char c=getchar();
        for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
        for(;isdigit(c);c=getchar()) x=x*10+c-'0';
        return x*f;
    }
    const int maxn=510;
    double A[maxn],S[maxn];
    int main() {
        A[0]=S[0]=1.0;
        int n=read();
        rep(i,1,n) {
            A[i]=(2*i*S[i-1])/(i*i);
            S[i]=S[i-1]+A[i];
            //printf("%.6lf
    ",A[i]);
        }
        printf("%.8lf
    ",A[n]);
        return 0;
    }
    View Code

    发现结果是n+1。

    归纳证明E(a_n)=n+1
    对于E(a_0)和E(a_1)显然成立
    设对于k<=n都成立,
    由期望的可加性
    E(a_n+1)=E(a_i+a_j)=E(a_i)+E(a_j)=2*(1+2+3+...+n+1)/(n+1)=n+2
  • 相关阅读:
    DRF项目创建流程(1)
    RESTful API规范
    超哥笔记--shell 基本命令(4)
    转:django模板标签{% for %}的使用(含forloop用法)
    自定django登录跳转限制
    jquery Ajax应用
    js重定向跳转页面
    django项目mysql中文编码问题
    python进阶(六) 虚拟环境git clone报错解决办法
    Linux基础(六) Vim之vundle插件
  • 原文地址:https://www.cnblogs.com/wzj-is-a-juruo/p/4802914.html
Copyright © 2011-2022 走看看