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時表示結束處理。...