51nod 1350 斐波那契表示 找規律遞推

2022-07-27 15:27:20 字數 1088 閱讀 8570

分析: - -! 找規律。。。首先可以歸納證明,對於n,最佳的取法是先取不大於n的最大的那個斐波那契數,然後遞推.從而可以得到算出f(n)的乙個方法,但是n的範圍太大了,先算出n較小的情況,會發現:

第三列為f(n),第二列為g(n),可以看出第k塊是由k-1塊和k-2塊+1合在一起得到的,從而可以先預處理前k塊之和(k不會超過100),然後對於每個n,先找到最大的不超過n的那塊,然後對剩下的項遞迴,總的複雜度為o(t*logn).

1 #include2 #include3

using

namespace

std;

4 typedef unsigned long

long

ull;

5 ull n,len=0

;6 ull fibo[1000000],maxn=100000000000000005;7

struct

_bb[100

];10

void

calfibo()25}

26 ull devide(ull v,int l,int

r)31

int t=(l+r)/2;32

if(fibo[t]==v)return

t;33

if(fibo[t]>v)return

devide(v,l,t);

34return

devide(v,t,r);35}

36//

int calf(int k)

42//

return cnt;

43//

}44 ull dp(int

k,ull num)

52ull solve()

59int

main()

68while(t--)

72return0;

73 }

51 nod 1350 斐波那契表示

每乙個正整數都可以表示為若干個斐波那契數的和,乙個整數可能存在多種不同的表示方法,例如 14 13 1 8 5 1,其中13 1是最短的表示 只用了2個斐波那契數 定義f n n的最短表示中的數字個數,f 14 2,f 100 3 100 3 8 89 f 16 2 16 8 8 13 3 定義g ...

51nod 1350 斐波那契表示 (數學)

每乙個正整數都可以表示為若干個斐波那契數的和,乙個整數可能存在多種不同的表示方法,例如 14 13 1 8 5 1,其中13 1是最短的表示 只用了2個斐波那契數 定義f n n的最短表示中的數字個數,f 14 2,f 100 3 100 3 8 89 f 16 2 16 8 8 13 3 定義g ...

斐波那契數列 斐波那契數列python實現

斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...