hihoCoder挑戰賽11 隨機斐波那契
阿新 • • 發佈:2019-01-03
題面:
#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)
輸出
一行一個實數,表示答案。你的輸出和答案的絕對或者相對誤差小於10-6
樣例解釋
共存在3種可能的數列
1,2,2 1/4
1,2,3 1/2
1,2,4 1/4
所以期望為3。
樣例輸入2樣例輸出
3.000000題意:
某個值是其前面任意兩個值的和,該兩值可以為同一個,求該值的期望值。因為每個值都會被計算2*(i-1)次,i為當前下標,直接加上去求個平均值就好了。
程式碼:
#include <iostream> #include <iomanip> using namespace std; int main() { double ans[501]={1},sum; int n; for(int i=1;i<=500;i++) { sum=0; for(int j=0;j<i;j++) { sum+=2*i*ans[j]; } ans[i]=sum/i/i; } while(cin>>n) cout<<fixed<<setprecision(6)<<ans[n]<<endl; return 0; }