洛谷 P3539 [POI2012]ROZ-Fibonacci Representation 解題報告
阿新 • • 發佈:2018-07-15
題意 第一次 long () .com == 數加 acc inf
P3539 [POI2012]ROZ-Fibonacci Representation
題意:給一個數,問最少可以用幾個斐波那契數加加減減湊出來
多組數據10 數據範圍1e17
第一次瞬間yy出做法,直接上去艹了。
寫完了交了對了開始想證明
策略:對於一個數\(k\),有兩種可能
- 存在一個\(f[i]==k\) 直接返回即可
- 存在\(f[i]<k<f[i+1]\),這時候使用\(|k-f[i]|\)與\(|f[i+1]-k|\)的較小者所代表的\(f[i]\),然後分治處理
感性證明:這樣規模減小的快(其實是不會證orz)
Code:
#include <cstdio> #define ll long long ll f[87],k,cnt; void init() { f[1]=f[2]=1; for(int i=3;i<=86;i++) f[i]=f[i-1]+f[i-2]; } void divide(ll d) { cnt++; for(int i=1;i<86;i++) { if(d==f[i]) return; if(d>f[i]&&d<f[i+1]) { if(d-f[i]>f[i+1]-d) divide(f[i+1]-d); else divide(d-f[i]); break; } } } int main() { init(); int t; scanf("%d",&t); while(t--) { scanf("%lld",&k); cnt=0; divide(k); printf("%d\n",cnt); } return 0; }
2018.7.15
洛谷 P3539 [POI2012]ROZ-Fibonacci Representation 解題報告