NOIP模拟题 斐波那契数列
题目大意
给定长度为$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模拟题 斐波那契数列相关推荐
- 牛客网(剑指offer) 第七题 斐波那契数列
//问题描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 function Fibonacci($n){//显然递归超时了 2333333333 ...
- python程序题斐波那契数列_Python_经典题_斐波那契数列
古典问题:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月兔子总数是多少?(使用循环实现) 分析: 第一个月是1对 第二个月还是1对 第三个月是2对(因为第 ...
- [剑指offer][JAVA]面试题第[10-1]题[斐波那契数列][动态规划][记忆化递归]
[问题描述][中等] 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下:F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N ...
- python程序题斐波那契数列_Python编程题9--斐波那契数列
题目1 已知一个数列:1.1.2.3.5.8.13.--,其规律为从第3项开始,每一项都等于其前两项的和,这个数列就是斐波那契数列. 请求出符合斐波那契数列规律的第11项. 代码实现--非递归 def ...
- python程序题斐波那契数列通项公式,Python斐波那契数列应用,编程练习题实例六...
python斐波那契数列,本文是关于Python编程练习题和答案实例六,斐波那契数列应用的示例.引用百度关于斐波那契数列的介绍,大家先简单来的了解下,什么是斐波那契数列? 斐波那契数列(Fibonac ...
- noip模拟赛 斐波那契
分析:暴力分有90,真良心啊. a,b这么大,连图都建不出来,肯定是有一个规律.把每个点的父节点写出来:0 1 1 12 123 12345 12345678,可以发现每一个循环的长度刚好是斐波那契数 ...
- 【斐波那契数列】10题-斐波那契数列
1 题目描述 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - ...
- leetcode算法题--斐波那契数列
原题链接:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/ int fib(int n) {if (n == 0 || n == ...
- [JS][C++]两题斐波那契数列:上台阶、triangle
上台阶 时间限制: 3000MS 内存限制: 589824KB 题目描述: 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法? 注:规定从一级到一级有0种走法. ...
最新文章
- Vue之概述、基本使用、data数据和if条件渲染
- 关于DSP开发的步骤
- md5加密解密代码_Python内置方法实现基于秘钥的信息加解密
- 修复QQ在网页上的快速登录
- cmd命令窗口mysql查询表数据命令行_cmd 命令行模式操作数据库 添加查询 修改 删除 ( 表 字段 数据)...
- python3.8.2安装ipython_CentOS系统 python3+python2 Ipython安装
- 谨慎设计方法签名(40)
- MySQL数据库的卸载
- 信道编码-RS-CRC-交织(一)
- Qt实现多语言切换 - Qt语言家
- java如何调用百度地图拾取坐标系统
- 如何用十步写一首原创歌曲
- 手机php文件怎么改后辍,手机百度云盘修改文件后缀名的方法
- String 占位符
- 太酷了!金山云重磅开源鎏光云游戏引擎
- Docker Desktop启动失败(Docker failed to initialize Docker Desktop is shutting down)
- 宽屏电脑应用不全屏显示问题
- UNLIMITED TABLESPACE权限
- 雇佣兵(程序设计与算法(一))
- Games101学习笔记(一)
热门文章
- set debug mode for flex builder
- 田志刚:要你共享,但不告诉你共享什么
- 流水账,从我开始接触计算机时写起
- 应用程序启动器 标记为信任_为什么您今天不能信任应用程序-以及如何解决它...
- 低声教育_我内心低声说:“成为建设者”
- JavaScript库和API
- 登高自卑 | 我的PyTorch入门与实践笔记
- python 数据类笔试题_一道 Python 类的笔试题详解
- 网站ui的配色有哪些需要注意的?
- Piccure Plus 3.1中文汉化版,Piccure Plus 3.1破解版,模糊照片变清晰神器,让你不再害怕手抖了