BZOJ [Poi2012]Fibonacci Representation】的更多相关文章

找最近的数 记忆化 (我也不知道为什么对的) #include<cstdio> #include<algorithm> #include<map> using namespace std; int q,lim=85,id; long long F[105]; map<long long,int> M; int dfs(long long x){ if (M[x]) return M[x]; int id1=lower_bound(F+1,F+lim+1,x)…
结论貌似是,,,肯定只有没有重复的数字.http://hzwer.com/6426.html 一开始猜的是贪心,感觉也是可以的啊...(想想都有道理,然而看到是神奇的(dp类)记忆化搜索,直接虚的不敢写..) #include <bits/stdc++.h> #define LL long long #define lowbit(x) x&(-x) #define inf 2e18 using namespace std; inline LL ra() { LL x=,f=; char…
题目描述 给出一个正整数x,问x最少能由多少个Fibonacci数加减算出. 例如1070=987+89-5-1,因此x=1070时答案是4. 输入 第一行一个正整数q (q<=10),表示有q组输出. 下面q行每行一个正整数x (x<=4*10^17). 输出 输出q行,依次表示每个输出的答案. 样例输入 1 1070 样例输出 4   因为f[i]=f[i-1]+f[i-2],f[i+1]=f[i]+f[i-1],能得到2f[i]=f[i+1]+f[i-2],所以最优答案一定存在没有一个F…
给出一个数字,用FIB数列各项加加减减来得到. 问最少要多少个(可以重复使用) 大概试了一下,fibonacci数列的增长是很快的,大概到了90+项就超过了题目范围…… 所以每次找一个最近的fibonacci数试一下就好,实测跑得飞快. #include<bits/stdc++.h> using namespace std; typedef long long ll; ll f[],n,m; inline ll read(){ ll f=,x=;char ch; ;}'); +ch-'); r…
由于是斐波那契数列,所以$x_i+x_j<=x_k,i<j<k$ 所以猜测可以贪心选择两边近的数处理. #include<cstdio> #include<algorithm> #define ll long long #define mid (l+r>>1) using namespace std; ll f[],tot=; inline ll findl(ll x) { ,r=tot,ans=; while(l<=r) { ; ; } ret…
P3539 [POI2012]ROZ-Fibonacci Representation 题意:给一个数,问最少可以用几个斐波那契数加加减减凑出来 多组数据10 数据范围1e17 第一次瞬间yy出做法,直接上去艹了. 写完了交了对了开始想证明 策略:对于一个数\(k\),有两种可能 存在一个\(f[i]==k\) 直接返回即可 存在\(f[i]<k<f[i+1]\),这时候使用\(|k-f[i]|\)与\(|f[i+1]-k|\)的较小者所代表的\(f[i]\),然后分治处理 感性证明:这样规模…
题目描述 The Fibonacci sequence is a sequence of integers, called Fibonacci numbers, defined as follows: Fib0=0,Fib1=1,Fibn=Fibn−2+Fibn−1 for n>1Fib_{0}=0,Fib_{1}=1,Fib_{n}=Fib_{n-2}+Fib_{n-1}\ for\ n>1Fib0​=0,Fib1​=1,Fibn​=Fibn−2​+Fibn−1​ for n>1 It…
大意:给定n, 求至少要多少个斐波那契数相加减后能得到n  (可以重复, 重复的算多次) 假设$dp(x)$为$x$的最小划分, 有$dp(x)=dp(x-F_k)+1$, 其中$F_k$为最接近$x$的斐波那契数 证明考虑数学归纳:…
题目传送门 转载自:five20,转载请注明出处 本来看到这题,蒟蒻是真心没有把握的,还是five20大佬巨orz 首先由于斐波拉契数的前两项是1,1 ,所以易得对于任何整数必能写成多个斐波拉契数加减的形式. 对于一个数x ,我们贪心找到与x 差值最小的斐波拉契数,将新的x 赋为差值,每次进行这个操作,统计次数,直到x 为0 为止,输出次数. 证明上述过程也很简单:由于我们知道任何整数必能写成多个斐波拉契数加减的形式,所以我们显然使xx 每次变得越小越好(即减的越多越好),因为每个斐波拉契数都等…
大意: 给定数$n$, 求将$n$划分为最少的斐波那契数的和或差. 每次取相邻$n$的斐波那契数一定最优, 考虑证明. 结论1:存在一个最优解,使得每个斐波那契数使用不超过1次.(考虑$2F_n=F_{n-2}+F_{n+1}$) 结论2:存在一个最优解,使得同号数不相邻, 异号数间隔$\ge 2$. 根据结论1和2, 假设最优解所选最大斐波那契数为$F_k$, 那么 $n$的下界为$F_k-F_{k-3}-F_{k-5}-...$, $k$为奇时为$F_{k-1}$, $k$为偶时为$F_{k…