1. 程式人生 > >【bzoj2796】 [Poi2012]Fibonacci Representation

【bzoj2796】 [Poi2012]Fibonacci Representation

style tchar 數字 work pre 實測 amp 個數字 --

給出一個數字,用FIB數列各項加加減減來得到。

問最少要多少個(可以重復使用)

大概試了一下,fibonacci數列的增長是很快的,大概到了90+項就超過了題目範圍……

所以每次找一個最近的fibonacci數試一下就好,實測跑得飛快。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 ll f[100],n,m;
 5 inline ll read(){
 6     ll f=1,x=0;char ch;
 7     do{ch=getchar();if(ch==-)f=-1
;}while(ch<0||ch>9); 8 do{x=x*10+ch-0;ch=getchar();}while(ch>=0&&ch<=9); 9 return f*x; 10 } 11 int work(ll x){ 12 if(!x)return x;int i; 13 for(i=1;f[i]<x;i++); 14 return work(min(f[i]-x,x-f[i-1]))+1; 15 } 16 int main(){ 17 f[0]=1;f[1]=1; 18 for
(int i=2;i<=91;i++)f[i]=f[i-1]+f[i-2]; 19 int T=read(); 20 while(T--){ 21 n=read(); 22 printf("%d\n",work(n)); 23 } 24 return 0; 25 }

【bzoj2796】 [Poi2012]Fibonacci Representation