题目大意

给定长度为$n$序列$A$,将它划分成尽可能少的若干部分,使得任意部分内两两之和均不为斐波那契数列中的某一项。

题解

不难发现$2\times 10^9$之内的斐波那契数不超过$50$个

先求出第$i$个数之前最后一个能和第$i$个数相加为斐波那契数的位置$last_i$。

考虑每一部分$[l,r]$只需满足$\max\{last_i\}<l(i\in [l,r])$即可。

那么设$F_i$表示以$i$为结尾最小化分数,那么转移到$i$的$j$显然是一段左右端点均单调不递减的区间,用单调队列维护即可。

#include<bits/stdc++.h>
#define debug(x) cerr<<#x<<" = "<<x
#define sp <<"  "
#define el <<endl
#define LL long long
#define M 100020
#define MAXN 2000000000
using namespace std;
int read(){int nm=0,fh=1; char cw=getchar();for(;!isdigit(cw);cw=getchar()) if(cw=='-') fh=-fh;for(;isdigit(cw);cw=getchar()) nm=nm*10+(cw-'0');return nm*fh;
}
map<int,int>MP; int n,m,p[M],F[M],last[M],G[M],q[M],hd,tl;
int main(){G[1]=1,G[2]=2,F[1]=1; n=read();for(m=2;(LL)G[m-1]+(LL)G[m]<=MAXN;m++) G[m+1]=G[m]+G[m-1];for(int i=1;i<=n;i++) p[i]=read();MP[p[1]]=1,q[tl++]=0,q[tl++]=1;for(int i=2,now=0;i<=n;i++){last[i]=0;for(int j=0;j<=m;j++){if(!MP.count(G[j]-p[i])) continue;int k=MP[G[j]-p[i]]; last[i]=max(last[i],k);} now=max(now,last[i]);while(q[hd]<now) hd++; F[i]=F[q[hd]]+1,MP[p[i]]=i;while(F[q[tl-1]]>=F[i]&&hd<tl) tl--; q[tl++]=i;}printf("%d\n",F[n]);return 0;
}

转载于:https://www.cnblogs.com/OYJason/p/9900510.html

NOIP模拟题 斐波那契数列相关推荐

  1. 牛客网(剑指offer) 第七题 斐波那契数列

    //问题描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 function Fibonacci($n){//显然递归超时了 2333333333 ...

  2. python程序题斐波那契数列_Python_经典题_斐波那契数列

    古典问题:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月兔子总数是多少?(使用循环实现) 分析: 第一个月是1对 第二个月还是1对 第三个月是2对(因为第 ...

  3. [剑指offer][JAVA]面试题第[10-1]题[斐波那契数列][动态规划][记忆化递归]

    [问题描述][中等] 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下:F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N ...

  4. python程序题斐波那契数列_Python编程题9--斐波那契数列

    题目1 已知一个数列:1.1.2.3.5.8.13.--,其规律为从第3项开始,每一项都等于其前两项的和,这个数列就是斐波那契数列. 请求出符合斐波那契数列规律的第11项. 代码实现--非递归 def ...

  5. python程序题斐波那契数列通项公式,Python斐波那契数列应用,编程练习题实例六...

    python斐波那契数列,本文是关于Python编程练习题和答案实例六,斐波那契数列应用的示例.引用百度关于斐波那契数列的介绍,大家先简单来的了解下,什么是斐波那契数列? 斐波那契数列(Fibonac ...

  6. noip模拟赛 斐波那契

    分析:暴力分有90,真良心啊. a,b这么大,连图都建不出来,肯定是有一个规律.把每个点的父节点写出来:0 1 1 12 123 12345 12345678,可以发现每一个循环的长度刚好是斐波那契数 ...

  7. 【斐波那契数列】10题-斐波那契数列

    1 题目描述 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - ...

  8. leetcode算法题--斐波那契数列

    原题链接:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/ int fib(int n) {if (n == 0 || n == ...

  9. [JS][C++]两题斐波那契数列:上台阶、triangle

    上台阶 时间限制: 3000MS 内存限制: 589824KB 题目描述: 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法? 注:规定从一级到一级有0种走法. ...

最新文章

  1. Vue之概述、基本使用、data数据和if条件渲染
  2. 关于DSP开发的步骤
  3. md5加密解密代码_Python内置方法实现基于秘钥的信息加解密
  4. 修复QQ在网页上的快速登录
  5. cmd命令窗口mysql查询表数据命令行_cmd 命令行模式操作数据库 添加查询 修改 删除 ( 表 字段 数据)...
  6. python3.8.2安装ipython_CentOS系统 python3+python2 Ipython安装
  7. 谨慎设计方法签名(40)
  8. MySQL数据库的卸载
  9. 信道编码-RS-CRC-交织(一)
  10. Qt实现多语言切换 - Qt语言家
  11. java如何调用百度地图拾取坐标系统
  12. 如何用十步写一首原创歌曲
  13. 手机php文件怎么改后辍,手机百度云盘修改文件后缀名的方法
  14. String 占位符
  15. 太酷了!金山云重磅开源鎏光云游戏引擎
  16. Docker Desktop启动失败(Docker failed to initialize Docker Desktop is shutting down)
  17. 宽屏电脑应用不全屏显示问题
  18. UNLIMITED TABLESPACE权限
  19. 雇佣兵(程序设计与算法(一))
  20. Games101学习笔记(一)

热门文章

  1. set debug mode for flex builder
  2. 田志刚:要你共享,但不告诉你共享什么
  3. 流水账,从我开始接触计算机时写起
  4. 应用程序启动器 标记为信任_为什么您今天不能信任应用程序-以及如何解决它...
  5. 低声教育_我内心低声说:“成为建设者”
  6. JavaScript库和API
  7. 登高自卑 | 我的PyTorch入门与实践笔记
  8. python 数据类笔试题_一道 Python 类的笔试题详解
  9. 网站ui的配色有哪些需要注意的?
  10. Piccure Plus 3.1中文汉化版,Piccure Plus 3.1破解版,模糊照片变清晰神器,让你不再害怕手抖了