NOIP模拟 斐波那契(set+fib)

本文介绍了斐波那契数列(兔子数列)的背景,然后提出一个问题:如何将一组拥有不同繁殖能力的兔子进行分组,使得组内兔子繁殖能力之和不形成斐波那契数列。要求分组数量最小。文章提供了输入输出格式,样例及数据限制,并分析了解决问题的方法,即利用set的数据结构,通过遍历和判断,以O(46n)的时间复杂度找到最少分组数量。
摘要由CSDN通过智能技术生成

【题目描述】

斐波那契数列又称兔子数列,可以通过以下方式产生:一开始只有一只兔子,一个月之后这只兔子每个月会繁殖出另一只兔子。之后每只兔子出生后都按照以上规则繁殖。我们把每个月的兔子的数量作为数列中的数就可以得到斐波那契数列。现在草原上有 n 只兔子排成一排,每只兔子有一个繁殖能力 ai。小 F 想把这些兔子分组,要求一个组内的兔子必须是连续的一段。而且因为兔子们不太喜欢兔子数列,所以组内任意两只兔子的繁殖能力的和不能在兔子数列中出现。

现在小 F 想让这些兔子的分组数量尽可能少,但是兔子很多,他算不过来,于是他找到了你,想让你告诉他最少的分组数量是多少。

【输入格式】

第一行一个整数 n,表示兔子的个数。

接下来一行 n 个数,依次表示 ai。

【输出格式】

输出一个数,表示最小的分组数量。

【样例输入】

5

1 5 2 6 7

【样例输出】

4

【备注】

对于 10% 的数据,n ≤ 20。

对于 30% 的数据,n ≤ 300。

对于 60% 的数据,n ≤ 1000。

对于 100 % 的数据,n ≤ 1e5, ai ≤ 1e9。

【题目分析】

好好的一到签到题死于不会set。。。。60滚粗。。。。。

因为你选取的每一段都是连续的,所以完全可以边加边操作。因为两个非法数之间最少划分成两段,所以顺序不会影响。

接下来考虑判断,每读入一个数,判断之前的数是否与之非法即可,因为2e9范围内的fib数只有46个,所以复杂度可以接受,最终复杂度:O(46n)。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值