zoukankan      html  css  js  c++  java
  • 【bzoj2796】 [Poi2012]Fibonacci Representation

    给出一个数字,用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
    ",work(n));
    23     }
    24     return 0;
    25 }
  • 相关阅读:
    组合模式
    数据去重
    combiner
    合并文档
    对象锁 区别 类锁
    一个简单的死锁示例
    线程安全的单例模式
    线程安全与不安全(误解)
    tf.nn.max_pool 池化
    tf.nn.depthwise_conv2d 卷积
  • 原文地址:https://www.cnblogs.com/zcysky/p/6881338.html
Copyright © 2011-2022 走看看