1350 斐波那契表示
题目来源: Project Euler
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题

 收藏
 关注

每一个正整数都可以表示为若干个斐波那契数的和,一个整数可能存在多种不同的表示方法,例如: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

找规律

F(n):1,1,2,1,2,2,1,2,2,2,3,1,2,2,2,3,2,3,3,1,2,2,2,3,2,3,3,2,3,3,3,4

#include<stdio.h>
using namespace std;
#define LL long long
LL n, fib[1005] = {0,1,1}, w[1005] = {0,1,1};
LL p(int i, LL j)
{if(j==fib[i])return w[i];if(j<=fib[i-1])return p(i-1, j);return p(i-1, fib[i-1])+p(i-2, j-fib[i-1])+j-fib[i-1];
}int main(void)
{int T, i, id;LL sum, ans;for(i=3;i<=84;i++){fib[i] = fib[i-1]+fib[i-2];w[i] = w[i-1]+w[i-2]+fib[i-2];//printf("%lld\n", w[i]);}scanf("%d", &T);while(T--){sum = ans = 0;scanf("%I64d", &n);for(id=1;sum+fib[id]<n;id++)sum += fib[id];for(i=1;i<=id-1;i++)ans += w[i];ans += p(id+1, n-sum);printf("%I64d\n", ans);}return 0;
}

51nod-1350:斐波那契表示相关推荐

  1. 51Nod 1242 斐波那契数列的第N项

    斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2) (1, 1, 2, 3, 5, 8, 13, 21, 34, ...

  2. 51nod 1355 斐波那契的最小公倍数

    Upd2019.4.19 yy了一个新的做法 新的写法 之前的东西 链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1355 很神 ...

  3. 矩阵快速幂(求斐波那契数列)

    因为Fib(n)至于最近的俩个序列有关(及Fib(n-1)和Fib(n-2)),所以我们保存最近的那俩个就行了. 设f(n)表示一个1*2的矩阵,f(n)=[Fib(n),Fib(n+1)],可以看成 ...

  4. 1355 斐波那契的最小公倍数

    1355 斐波那契的最小公倍数 原题连接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1355 之前看唐老师题解学习 ...

  5. java 斐波拉_Java实现斐波那契数列

    斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n&g ...

  6. java 二分搜索获得大于目标数的第一位_程序员常用查找算法(顺序、二分、插值、分块、斐波那契)...

    顺序查找 基本思想 属于线性查找和无序查找,从一端开始顺序扫描,直到找到与目标值value相等的元素. 这是最基本的查找方法,也是时间复杂度最高的查找算法. 在数据过多时,这种方法并不适用. 代码实现 ...

  7. 剑指offer:面试题10- I. 斐波那契数列

    写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 ...

  8. 斐波那契算法举例(iterative Fibonacci algorithm)

    // count_change.cpp : Defines the entry point for the console application. // #include "stdafx. ...

  9. BZOJ2275[Coci2010]HRPA——斐波那契博弈

    题目描述 N个石子,A和B轮流取,A先.每个人每次最少取一个,最多不超过上一个人的个数的2倍. 取到最后一个石子的人胜出,如果A要有必胜策略,第一次他至少要取多少个. 输入 第一行给出数字N,N< ...

最新文章

  1. Python IDE ——Anaconda+PyCharm的安装与配置
  2. BIO bi_sector submit_bio make_request_fn
  3. Centos常用系统命令
  4. MongoDB 索引-9
  5. 5G小科普(漫画版,So easy!)
  6. 初级程序员应该怎么办?
  7. asp.net学习之SqlDataSource 2 select的四种参数赋予形式的解释
  8. java memorystream 包_存储在MemoryStream中的裁剪图像中心
  9. HCIE-Security Day5:防火墙会话表和转发原理
  10. 成也DP,败也DP(AFO?)
  11. Java常量不能二次赋值与常量不能修改值意思一样吗?
  12. 什么是tftp服务器? 如何搭建tftp服务器?
  13. ODATA入门:$inlinecount,$top,$skip实现
  14. 记录在APIO2019前
  15. 如何准备项目启动大会
  16. Android wear 睡眠追踪,为什么智能手表还不是最理想的睡眠追踪设备
  17. 华天软件Inforcenter PLM
  18. DontDestroyOnLoad带来的麻烦
  19. 向量空间中的基底和基变换以及坐标变换
  20. MobSF的安装使用及踩坑指南

热门文章

  1. 开课吧学python靠谱吗-开课吧成为CNCC中国计算机大会唯一教育合作伙伴
  2. python语言的读法-Python语言的特点及自学建议
  3. 学python可以做什么职业-python学完之后比较适合哪些职业工作呢?
  4. vs code 开发企业级python_入股不亏!VS Code中最好用的Python扩展插件
  5. Vue-的基本使用和指令
  6. Web API-DOM-滚动事件、加载事件和元素大小和位置
  7. vue 定时器:setInterval和setTimeout使用实例及区别
  8. java点击上传上传mysql并显示图片_java + mysql + jdbc实现图片上传
  9. 【python 笔记】赋值语句和基本输入输出
  10. 【数据结构和算法】拓扑排序(附leetcode题 207/210 课程表)