#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\n",A[i]);
    }
    printf("%.8lf\n",A[n]);
    return 0;
}

发现结果是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
时间: 2024-10-30 07:44:11

#1164 : 随机斐波那契的相关文章

hihocoder 1164 随机斐波那契

传送门: 随机斐波那契 #1164 : 随机斐波那契 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 大家对斐波那契数列想必都很熟悉: 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

ACM学习历程—Hihocoder 1164 随机斐波那契(数学递推)

时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 大家对斐波那契数列想必都很熟悉: 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) 输出 一行一个

hihoCoder挑战赛11 随机斐波那契

题目链接:http://hihocoder.com/problemset/problem/1164 题面: #1164 : 随机斐波那契 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 大家对斐波那契数列想必都很熟悉: 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,要

hiho 挑战赛11(随机斐波那契-算期望找规律)

题目1 : 随机斐波那契 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 大家对斐波那契数列想必都很熟悉: 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<

随机求斐波拉契数列第n位的代码

1------------------------------------------------------------ package oo.day02;import java.util.Scanner;public class FibonacciSequence { public static void main(String[] args) { System.out.println("请输入斐波拉契数列第n项,n>0"); Scanner scan=new Scanner

用安卓实现斐波那契数和最近点对问题

目录 1 运行效果展示 2 具体编码 2.1 斐波那契数问题 2.2 最近点对问题 1 运行效果展示 2 具体编码 2.1 斐波那契数问题 具体问题即解决方案请参考本人另一篇博客:算法笔记_001:斐波那契数的多种解法 功能界面布局main_one.xml文件对应界面图: 其源码: <?xml version="1.0" encoding="utf-8" ?> <GridLayout xmlns:android="http://schem

优先队列——斐波那契堆

1. 引言 最近一直在写最短路径的迪杰斯特拉与双向迪杰斯特拉算法,使用优先队列可以极大的加快算法的运行效率.比如在OL数据集中,对于迪杰斯特拉算法用优先队列(二叉堆实现)代替普通的数组(数据结构书中提供的算法)快了将近60倍. 由上可得如何实现优先队列对迪杰斯特拉.双向迪杰斯特拉以及其它用到优先队列的最短路径求解算法(如reach.A*)等至关重要.另外对于一些其他用到优先队列的问题也具有相当的影响. 对于优先队列来说,只需要入队.出队即可,因为该文章只关注堆的插入(push)与删除(delet

实现斐波那契神兔

1.用循环实现不死神兔 故事得从西元1202年说起,话说有一位意大利青年,名叫斐波那契. 在他的一部著作中提出了一个有趣的问题:假设一对刚出生的小兔一个月后就能长成大兔, 再过一个月就能生下一对小兔,并且此后每个月都生一对小兔,一年内没有发生死亡, 问:一对刚出生的兔子,一年内繁殖成多少对兔子? 1 1 2 3 5 8 13 21 1 import java.util.Arrays; 2 3 public class Tu { 4 5 public static void main(String

用递归和非递归的方法输出斐波那契数列的第n个元素(C语言实现)

费波那契数列(意大利语:Successione di Fibonacci),又译为费波拿契数.斐波那契数列.费氏数列.黄金分割数列. 在数学上,费波那契数列是以递归的方法来定义: {\displaystyle F_{0}=0} {\displaystyle F_{1}=1} {\displaystyle F_{n}=F_{n-1}+F_{n-2}}(n≧2) 用文字来说,就是费波那契数列由0和1开始,之后的费波那契系数就是由之前的两数相加而得出.首几个费波那契系数是: 0, 1, 1, 2, 3