フィボナッチ数列を「ランダム化された」新しいを生成するには、以下の方法を考えてみましょう。
A0 = 1、愛= AJ + AK、I> 0、jおよびkは、(j及びkは独立している)、[0、I-1]の区間内の全ての整数からランダムに選択されます。
今与えられたN、長さの最終的な配列の全てposibilitiesのうち、n、の期待は何ですか?
入力
整数nの一行。
出力
解答を表す浮動小数点数と一行。それは少ない10-6より標準答えることである相対的または絶対的なエラーが発生した場合の答えは正しいとみなされます。
サンプル入力
2
サンプル出力
3.000000
質問の意味:私はあなたがフィボナッチ列に精通していると信じて:A0 = 1、A1 = 1 =、愛愛-1 + AI-2、(I> 1)。A0 = 1、= AJ愛:今列を生成したフィボナッチ数を考慮し 、+ AKをI> 0の整数、JからK [0、I-1](独立JおよびK)をランダムに選択しました。今与えられたN、E期待値に可能なの()、即ち、一連を得るために必要。
思考:[I] = [ J] + [K]、J およびkは独立変数です(変化量は、従属変数を除く他の変化量は発生しません)、j、kが、[0を取ることができますI-1] 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;
}