返回信息流给你数字 k ,请你返回和为 k 的斐波那契数字的最少数目,其中,每个斐波那契数字都可以被使用多次。
斐波那契数字定义为:
F1 = 1
F2 = 1
Fn = Fn-1 + Fn-2 , 其中 n > 2 。
数据保证对于给定的 k ,一定能找到可行解。
示例 1:
输入:k = 7
输出:2
解释:斐波那契数字为:1,1,2,3,5,8,13,……
对于 k = 7 ,我们可以得到 2 + 5 = 7 。
示例 2:
输入:k = 10
输出:2
解释:对于 k = 10 ,我们可以得到 2 + 8 = 10 。
示例 3:
输入:k = 19
输出:3
解释:对于 k = 19 ,我们可以得到 1 + 5 + 13 = 19 。
看题解是用贪心来做。。每次找最近的斐波那契数,想问下如何证明贪心的正确性
k能到10的9次方... 用dp会超时超内存
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #99072同步于 2020/4/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
【问题】和为 k 的斐波那契数字的最少数目
m995877461
2020/4/19镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
矩阵快速幂算斐波那契复杂度为log2n。通过二分法找最大的需要数字的复杂度也为log2n
【 在 m995877461 (空白) 的大作中提到: 】
: 给你数字 k ,请你返回和为 k 的斐波那契数字的最少数目,其中,每个斐波那契数字都可以被使用多次。
: 斐波那契数字定义为:
: ...................
我想问的是为啥找距离k最近的斐波那契数一定是正确的,如何证明贪心到最后一定是正确的...
【 在 shisuan (山亓) 的大作中提到: 】
: 就点到这里。剩下的自己想就足够了
为啥每次贪心找最大的,一定是正确的呢[ema1][ema1][ema1]
【 在 LeesangHyuk (LeesangHyuk) 的大作中提到: 】
: 这周周赛的嘛,用一个Deque或者TreeSet来保存得到的斐波那契数列,最大的到刚好大于k的那个数为止,然后出pollFirst即可。
随便猜一波嘛,如果是幂数然后凑一个数就是贪心最接近的幂数,斐波那契额也差不多是指数增长,随意猜想应该是一样的规律
【 在 m995877461 的大作中提到: 】
: 为啥每次贪心找最大的,一定是正确的呢
确实是用贪心,数字加和,肯定是越大需要的个数越少。
至于如何证明用贪心,我不会…
【 在 m995877461 的大作中提到: 】
:为啥每次贪心找最大的,一定是正确的呢[ema1][ema1][ema1]