UESTC1133 菲波拉契數制 01揹包思想

2021-07-15 08:43:46 字數 1024 閱讀 9026

description

我們定義如下數列為菲波拉契數列:f(

1)=1

f(2)=2

f(i)

=f(i

−1)+

f(i−

2)(i

>=3)

給定任意乙個數,我們可以把它表示成若干互不相同的菲波拉契數之和。比如13

有三種表示法13=

13 13=5

+813=2

+3+8

現在給你乙個數n

,請輸出把它表示成若干互不相同的菲波拉契數之和有多少種表示法。

input

第一樣乙個數t

,表示資料組數,之後t

行,每行乙個數n。t

≤105

1≤n≤

105

output

輸出t行,每行乙個數,即n

有多少種表示法。

sample input

6 1 

2 3 

4 5 13

sample output

1 1 

2 1 2 3

由於資料比較小,因此用01揹包的想法去考慮即可。可用滾動陣列對記憶體進行優化。

#include #include #include #include #include #include #include #include #include #include using namespace std;

#define inf 0x3f3f3f3f

typedef long long ll;

ll f[50];

ll dp[100005];

int main()

memset(dp,0,sizeof(dp));

dp[0]=1;

for(int i=1;i<50;i++)

}int t;

scanf("%d",&t);

while(t--)

return 0;

}

UESTC 菲波拉契數制

一維的01揹包 include include include include include include include include include define fop freopen in r stdin define inf 0x3f3f3f3f define ll int64 de...

dp uestc L 菲波拉契數制公升級版

資料很大,以揹包的思路陣列開不下。先定序地考慮乙個菲波拉契數如fib i 的表示法,假設i比較大,由菲波拉契數的定義可知道fib i fib i 1 fib i 2 要找到其它表示就繼續拆分fib i 1 或fib i 2 假如拆分fib i 1 得到fib i 2 fib i 2 fib i 3 ...

菲波那契數的餘數 大數

菲波那契數大家可能都已經很熟悉了 f 1 0 f 2 1 f n f n 1 f n 2 n 2 因此,當需要其除以某個數的餘數時,不妨加一些處理就可以得到。輸入資料為一些整數對p k,p 1 p 5000 表示菲波那契數的序號,k 1 k 15 表示2的冪次方。遇到兩個空格隔開的0時表示結束處理。...