斐波那契fib
输入N和N个数(N<=10,每个数<=10^17),对于每个数,要输出能用几个斐波那契数加加减减得到
样例输入:
3
5
10
1070
样例输出:
1
2
4
直接拷题解:
fib[i]表示斐波那契数列的第i项,两个结论:
1.一个数不能出现两次:fib[i]+fib[i]=fib[i-2]+fib[i+1],而fib[2]+fib[2]=fib[3],将出现两次的数不断拆分,答案只会减小不会变大。
2.相邻两项不能同时取:fib[i]-fib[i-1]=fib[i-2],fib[i]+fib[i-1]=fib[i+1],将相邻的数不断拆分,答案只会减小不会变大。
对于一个X,要么本身就是fib数,要么用比X大的最小fib数减掉一个数,要么用比X小的最大fib数来加上一个数。
这个故事告诉我们,求出所有fib数后,直接记忆化搜索就可以了。
上代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring> using namespace std; long long n,fib[],f[],x;
int ans(long long x)
{
int r;
if ((x<)&&(f[x]!=)) return f[x];
for (int i=;i<=;i++)
if (fib[i]>x)
{ r=i; break; }
if ((fib[r]==x)||(fib[r-]==x)) { return ; f[x]=; }
if (x<) {
f[x]=min(ans(fib[r-])+ans(x-fib[r-]),ans(fib[r])+ans(fib[r]-x));
return f[x];}
return min(ans(fib[r-])+ans(x-fib[r-]),ans(fib[r])+ans(fib[r]-x));
return f[x];
}
int main()
{
freopen("fib.in","r",stdin);
freopen("fib.out","w",stdout);
fib[]=fib[]=; cin>>n;
for (int i=;i<=;i++) fib[i]=fib[i-]+fib[i-];
//for (int i=1;i<=85;i++) cout<<fib[i]<<' ';
for (int i=;i<=n;i++) cin>>x,cout<<ans(x)<<endl;
//cout<<ans(5);
return ;
}
斐波那契fib的更多相关文章
- bzoj 3657 斐波那契数列(fib.cpp/pas/c/in/out)
空间 512M 时限2s [题目描述] 有n个大于1的正整数a1,a2,…,an,我们知道斐波那契数列的递推式是f(i)=f(i-1)+f(i-2),现在我们修改这个递推式变为f(i)=f(i-1) ...
- python迭代器实现斐波拉契求值
斐波那契数列(Fibonacci sequence),又称黄金分割数列,也称为"兔子数列":F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*).例 ...
- Codeforces 719E [斐波那契区间操作][矩阵快速幂][线段树区间更新]
/* 题意:给定一个长度为n的序列a. 两种操作: 1.给定区间l r 加上某个数x. 2.查询区间l r sigma(fib(ai)) fib代表斐波那契数列. 思路: 1.矩阵操作,由矩阵快速幂求 ...
- 斐波那契(Fibonacci)数列的几种计算机解法
题目:斐波那契数列,又称黄金分割数列(F(n+1)/F(n)的极限是1:1.618,即黄金分割率),指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.…….在数学上,斐波纳契数列以如下 ...
- HDU 2516 取石子游戏(斐波那契博弈)
取石子游戏 Time Limit: 2000/1000 MS(Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- 一些代码 I (斐波那契、for...else...、try和return、classmethod、统计个数)
1. 斐波那契 from itertools import islice def fib(): a, b = 0, 1 while True: yield a a, b = b, a+b print ...
- Project Euler 104:Pandigital Fibonacci ends 两端为全数字的斐波那契数
Pandigital Fibonacci ends The Fibonacci sequence is defined by the recurrence relation: F[n] = F[n-1 ...
- cojs 疯狂的粉刷匠 疯狂的斐波那契 题解报告
疯狂的斐波那契 学习了一些奇怪的东西之后出的题目 最外层要模p是显然的,然而内层并不能模p 那么模什么呢,显然是模斐波那契的循环节 那么我们可以一层层的求出每层的斐波那契循环节 之后在从内向外用矩阵乘 ...
- 斐波那契数 c 语言实现
斐波那契数列,又称黄金数列,指的是这样一个数列:1.1.2.3.5.8.13.21.……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2) ...
随机推荐
- linux强大IDE——Geany配置说明
今天开始用Ubuntu了(主要是为了防止自己在windows下不自觉的打游戏之类的) 刚开始用的很不习惯 找不到合适的编译器(DEV c++什么时候才能出Linux的啊) 先后下了codeli ...
- CSS 高级
1.CSS 盒模型(Box Model) 所有 HTML 元素都可以看作是盒子,在 CSS 中,“Box Model”这一术语主要是在布局时使用. CSS 盒模型(Box Model)规定了处理元素内 ...
- 【python之旅】python的基础三
目录: 1.装饰器 2.迭代器&生成器 3.Json & pickle 数据序列化 4.软件目录结构规范 一.装饰器 定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能 原 ...
- shell编程的一些例子5
1.here文档 here文档允许我们调用一个交互式程序:可以从脚本程序中输出大量的文本,从而不必echo每行 例子1: #!/bin/bash cat<<!DATA! This is a ...
- POJ 1442 Black Box 堆
题目: http://poj.org/problem?id=1442 开始用二叉排序树写的,TLE了,改成优先队列,过了.. 两个版本都贴一下吧,赚稿费.. #include <stdio.h& ...
- aspose.cells根据模板导出excel
又隔十多天没写博客了,最近都在忙项目的事情,公司人事变动也比较大,手头上就又多了一个项目.最近做用aspose.cells根据模板导出excel报价单的功能,顺便把相关的核心记下来,先上模板和导出的效 ...
- Hibernate Session 获取connection
Hibernate Session 获取connection 由于最近一个项目要用到一条辅助的SQL ,hibernate里面的SQLQuery API 总的SQL语句不能包含 : 冒号, 固放弃Hi ...
- [HDOJ 5212] [BestCoder Round#39] Code 【0.0】
题目链接:HDOJ - 5212 题目分析 首先的思路是,考虑每个数对最终答案的贡献. 那么我们就要求出:对于每个数,以它为 gcd 的数对有多少对. 显然,对于一个数 x ,以它为 gcd 的两个数 ...
- Hicharts弄个样例
前端的事情,但最好自己要了解一下,能作个最简单的东东出来... 样例,需要的时候,用用,就喟给它一样模板数据即可. PYTHON,把字典的键值和KEY值匹配成列表即可. $(function () { ...
- 可爱的PYTHON,更新到0.5版本代码
这书看得挺顺的. 按着思路学习软件开发的主流思想.. cdctools.py # _*_ coding: utf-8 _*_ import os,sys def cdWalker(CDROM, cdc ...