记忆化搜索专题--nkoj3749斐波拉契表示法

原创 2016年08月28日 20:14:51
P3749斐波拉楔表示法
时间限制 : - MS   空间限制 : 65536 KB 
评测说明 : 时限1000ms
问题描述

斐波拉楔数列0,1,1,2,3,5,8,13,21,......

给出一个整数K,用斐波拉楔数列各项加减来表示。例如

10=5+5

19=21-2

17=13+5-1

1070=987+89-5-1
对于给出的数字K,请计算出最少需要使用几次斐波拉楔数列的数字就可以表示出来。

输入格式

第一行,一个整数p,表示有p个数字(1<=P<=10)
接下来p行,每行一个正整数K,表示需要计算的数字(1<=K<=10^18)

输出格式

p行,每行一个整数,表示对应数字最少需要使用几次斐波拉楔数字。

样例输入

4
7
4
16
1070

样例输出

2
2
2
4




严重注意:二分查找时lowerbound只能到斐波拉契的第104项,超过爆longlong,会RE

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<map>
using namespace std;
map<long long,long long > f;
map<long long,bool > mark;
long long fib[150];
long long n;
long long dp(long long x){
	if(mark[x])return f[x];
	mark[x]=true;
	int r=lower_bound(fib+1,fib+1+104,x)-fib;
	if(fib[r]==x)return f[x]=1;
	int l=r-1;
	return f[x]=min(dp(fib[r]-x),dp(x-fib[l]))+1;
}
int main(){
	long long t,i;
	cin>>t;
	fib[1]=1;
	//fib[2]=1;
	for(i=2;i<=110;i++)fib[i]=fib[i-1]+fib[i-2];
	while(t--){
		//f.clear();
		//mark.clear();
		scanf("%I64d",&n);
		printf("%I64d\n",dp(n));
	}
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

HDOJ1078 记忆化搜索入门题 有详细的记忆化搜索模板程序

FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth...
  • computer_user
  • computer_user
  • 2017年08月11日 10:18
  • 202

记忆化搜索专题

什么是记忆化搜索呢?搜索的低效在于没有能够很好地处理重叠子问题;动态规划虽然比较好地处理了重叠子问题,但是在有些拓扑关系比较复杂的题目面前,又显得无奈。记忆化搜索正是在这样的情况下产生的,它采用搜索的...
  • hjf1201
  • hjf1201
  • 2017年11月30日 20:54
  • 239

记忆化搜索简介

记忆化搜索:算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存。 一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。 更重要的是搜索还可以剪枝,可能剪去...
  • ILECY
  • ILECY
  • 2016年03月12日 20:03
  • 2536

poj1088 dp 记忆化搜索 (入门好题)

题目意思很简单,一开始我直接DFS深搜,超时果果的,看了题解以后,学习了记忆化搜索,就是记录下已经求出的当前结点的最大值,在之后访问到这个节点时,就能直接调用结果,减少重复计算。是一道好题。 以下为...
  • lizy3838
  • lizy3838
  • 2016年02月03日 22:38
  • 502

动态规划、记忆化搜索、Dijkstra算法的总结

动态规划        动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是...
  • Lieacui
  • Lieacui
  • 2016年06月24日 10:34
  • 2904

POJ 2704 Pascal's Travels (基础记忆化搜索)

POJ 2704 Pascal's Travels (基础记忆化搜索)
  • Tc_To_Top
  • Tc_To_Top
  • 2015年04月25日 21:35
  • 814

【OJ】DP 01背包 记忆化搜索 O(nW)

/* 01背包 记忆化搜索 O(nW) */ #include #include #include #define MAX_N 101 #define MAX_W 3001 using namesp...
  • u014134180
  • u014134180
  • 2014年10月23日 20:24
  • 625

hdu 1428 挺好的一个题目 记忆化搜索+广搜实现迪杰斯特拉

漫步校园 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub...
  • lw277232240
  • lw277232240
  • 2017年06月23日 08:59
  • 160

记忆化搜索(搜索+动态规划)HDU1978 How Many Ways

这一题应该算是比较简单的,但是可以用记忆化搜索,刚开始我不会,这应该算是我接触到记忆化搜索的第一题。 直接上原题 Z - How many ways Time Limit:1000M...
  • Kerwun
  • Kerwun
  • 2016年08月20日 19:41
  • 230

递归+记忆化搜索

边界条件与递归方程是递归函数的两个要素。 1)阶乘函数 直接打板子: Int fac(int n) { If (n==0) return 1; Else return n*fac(n-1); } 这里...
  • zjh_2017
  • zjh_2017
  • 2017年10月29日 07:22
  • 117
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:记忆化搜索专题--nkoj3749斐波拉契表示法
举报原因:
原因补充:

(最多只允许输入30个字)