斐波那契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) ...
随机推荐
- js 中用Dom2级事件处理函数(改变样式)
下面这些客户端 javascript代码用到了事件,它给一个很重要的事件--“load" 事件注册了一个事件处理程序.同时展示了注册”click“事件处理函数更高级的一种方法 <!do ...
- node-webkit:开发桌面+WEB混合型应用的神器
顾名思义, node -webkit就是 node js+webkit. 这样做的好处显而易见,核心奥义在于,用 node js来进行本地化调用,用webkit来解析和执行HTML+JS. 快速上手 ...
- PHP实现多web服务器共享SESSION数据-session数据写入mysql数据库
http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2010/0822/5276.html http://hi.baidu.com/lei_com/ ...
- struts2整合jfreechart
需要的包: struts2-jfreechart-plugin-2.2.1.1.jar jfreechart-1.0.13.jar jcommon-1.0.17.jar 前台jsp页面中可以使用ifr ...
- 【python】元组的插入
>>> temp=(1,2,3,4,5)>>> temp=temp[:2]+(8,)+temp[2:]>>> temp(1, 2, 8, 3, 4 ...
- Java集合类操作优化总结
清单 1.集合类之间关系 Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHas ...
- E.164 Format
From http://en.wikipedia.org/wiki/E.164 E.164 is an ITU-T recommendation, titled The international p ...
- bzoj 4066: 简单题 kd-tree
4066: 简单题 Time Limit: 50 Sec Memory Limit: 20 MBSubmit: 234 Solved: 82[Submit][Status][Discuss] De ...
- IronPython脚本调用C#dll示例
上篇Python脚本调用C#代码数据交互示例(hello world)介绍了与C#紧密结合的示例,这里还将提供一个与C#结合更紧密的示例,直接调用C#编写的DLL. 我们还是沿用了上篇文章的 ...
- OUTLOOK连EXCHANGE,配置POP3时跳出错误问题
"Authentication failed because outlook doesnt support any Resolved Question: "Authenticati ...