zoukankan      html  css  js  c++  java
  • 51 Nod 1350 斐波那契表示

                                1350 斐波那契表示
    每一个正整数都可以表示为若干个斐波那契数的和,一个整数可能存在多种不同的表示方法,例如:14 = 13 + 1 = 8 + 5 + 1,其中13 + 1是最短的表示(只用了2个斐波那契数)。定义F(n) = n的最短表示中的数字个数,F(14) = 2,F(100) = 3(100 = 3 + 8 + 89),F(16) = 2(16 = 8 + 8 = 13 + 3)。定义G(n) = F(1) + F(2) + F(3) + ...... F(n),G(6) = 1 + 1 + 1 + 2 + 1 + 2 = 8。给出若干个数字n,求对应的G(n)。
    Input
    第1行:一个数T,表示后面用作输入测试的数的数量(1 <= T <= 50000)。
    第2 - T + 1行:每行1个数n(1 <= n <= 10^17)。
    Output
    输出共T行:对应每组数据G(n)的值。
    Input示例
    3
    1
    3
    6
    Output示例
    1
    3
    8

    思路:打表找规律
       
    G(n)的排列显然是有规律的,
       他是按照斐波那契数列对应的数分层,
       第一层是G(1)(只有一个数),第二层是G(2)(只有一个数),
       第三层是G(3)、G(4)(两个数),第四层三个数,第五层五个数,第六层八个数......依次类推
       
    规律是后一层的G(n)共有fib(n)个的话,G(n)的前fib(n-1)个与之前一层完全相同,
       后fib(n)-fib(n-1)个等于前一层前fib(n)-fib(n-1)个对应的数加一
     1 #include <cstdio>
     2 #include <cctype>
     3 #include <algorithm>
     4 #define MAXN 1000
     5 
     6 int n,m,sum;
     7 
     8 int f[MAXN];
     9 
    10 int hh() {
    11     f[0]=0;f[1]=1;
    12     for(int i=2; i<=40; ++i) f[i]=f[i-1]+f[i-2];
    13     
    14     for(int t,s,x,i=1; i<=90; ++i) {
    15         printf("F[%d] : ",i);
    16         t=i;s=1;
    17         int x=std::upper_bound(f+1,f+1+40,t)-f;
    18         t-=f[x-1];
    19         if(!t) {
    20             printf("%d ",s);
    21             printf("G[%d] : %d
    ",i,sum+s);
    22             sum+=s;
    23             continue;
    24         }
    25         for(int j=x-2; j; --j) {
    26             if(t-f[j]>=0) t-=f[j],++s;
    27             if(!t) break;
    28         }
    29         printf("%d ",s);
    30         printf("G[%d] : %d
    ",i,sum+s);
    31         sum+=s;
    32     }
    33     
    34     return 0;
    35 }
    36 
    37 int sb=hh();
    38 int main(int argc,char**argv) {;}
    打表
    代码
  • 相关阅读:
    HDU 4801 Pocket Cube
    HDU 5008 Boring String Problem(后缀数组+二分)
    2-Sat问题
    后缀数组
    树形DP
    图论
    SRM 628 DIV2
    组合博弈
    Github使用笔记
    VS2010+OpenCV配置
  • 原文地址:https://www.cnblogs.com/whistle13326/p/7724948.html
Copyright © 2011-2022 走看看