斐波那契fib

2022-05-05 17:54:11 字數 880 閱讀 7257

輸入n和n個數(n<=10,每個數<=10^17),對於每個數,要輸出能用幾個斐波那契數加加減減得到

樣例輸入:35

101070

樣例輸出:12

4直接拷題解:

fib[i]表示斐波那契數列的第i項,兩個結論:

1.乙個數不能出現兩次:fib[i]+fib[i]=fib[i-2]+fib[i+1],而fib[2]+fib[2]=fib[3],將出現兩次的數不斷拆分,答案只會減小不會變大。

2.相鄰兩項不能同時取:fib[i]-fib[i-1]=fib[i-2],fib[i]+fib[i-1]=fib[i+1],將相鄰的數不斷拆分,答案只會減小不會變大。

對於乙個x,要麼本身就是fib數,要麼用比x大的最小fib數減掉乙個數,要麼用比x小的最大fib數來加上乙個數。

這個故事告訴我們,求出所有fib數後,直接記憶化搜尋就可以了。

上**:

#include #include 

#include

#include

using

namespace

std;

long

long n,fib[90],f[10000000

],x;

int ans(long

long

x)

if ((fib[r]==x)||(fib[r-1]==x))

if (x<10000000

)

return min(ans(fib[r-1])+ans(x-fib[r-1]),ans(fib[r])+ans(fib[r]-x));

return

f[x];

}int

main()

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

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

迴圈斐波那契數列 斐波那契數列應用

什麼是斐波那契數列 斐波那契數列指的是這樣乙個數列 1,1,2,3,5,8,13,21,34,55,89,144 這個數列從第3項開始,每一項都等於前兩項之和 台階問題 有一段樓梯有10級台階,規定每一步只能跨一級或兩級,要登上第10級台階有幾種不同的走法?這就是乙個斐波那契數列 登上第一級台階有一...

斐波那契堆

以下是實現的程式 肯定可以再優化的。include include include include using namespace std class node delete m child m child null class fibonacciheap node insert int key v...