hihoCoder 1239 Fibonacci

来源:互联网 发布:读资治通鉴的女人 知乎 编辑:程序博客网 时间:2024/06/06 09:00

#1239 : Fibonacci

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

Given a sequence {an}, how many non-empty sub-sequence of it is a prefix of fibonacci sequence.

A sub-sequence is a sequence that can be derived from another sequence by deleting some elements without changing the order of the remaining elements.

The fibonacci sequence is defined as below:

F1 = 1, F2 = 1

Fn = Fn-1 + Fn-2, n>=3

输入

One line with an integer n.

Second line with n integers, indicating the sequence {an}.

For 30% of the data, n<=10.

For 60% of the data, n<=1000.

For 100% of the data, n<=1000000, 0<=ai<=100000.

输出

One line with an integer, indicating the answer modulo 1,000,000,007.

样例提示

The 7 sub-sequences are:

{a2}

{a3}

{a2, a3}

{a2, a3, a4}

{a2, a3, a5}

{a2, a3, a4, a6}

{a2, a3, a5, a6}


样例输入
62 1 1 2 2 3
样例输出
7
解题思路:先打表求fib数列前25项(恰好小于10^6),然后DP
dp[i][j]表示到第i位为止,fib数列第j项的表达方法有多少种
dp[i][1]=dp[i-1][1]
dp[i][j]=dp[i-1][j]+dp[i-1][j-1]//dp[i-1][j]表示用当前项替代i-1之前的第j项,dp[i-1][j-1]表示i-1之前的第j-1项加上当前项
一定要取模,否则溢出会WA
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <set>#include <map>#include <list>#include <queue>#include <stack>#include <deque>#include <vector>#include <bitset>#include <cmath>#include <utility>#define Maxn 100005#define Maxm 1000005#define MOD 1000000007#define lowbit(x) x&(-x)#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define PI acos(-1.0)#define make_pair MP#define LL long long #define Inf (1LL<<62)#define inf 0x3f3f3f3f#define re freopen("in.txt","r",stdin)#define wr freopen("out.txt","w",stdout)using namespace std;int fib[30];LL doc[Maxm][26];map<int,int> _fib;void init(){fib[1]=fib[2]=1;_fib[1]=1;for(int i=3;fib[i-1]+fib[i-2]<=100000;i++)fib[i]=fib[i-1]+fib[i-2],_fib[fib[i]]=i;}int main(){init();int n,num,ans;//re;while(~scanf("%d",&n)){ans=0;memset(doc,0,sizeof(doc));scanf("%d",&num);if(num==1){ans++;doc[0][1]=1;}for(int i=1;i<n;i++){scanf("%d",&num);for(int j=1;j<=25;j++)doc[i][j]=doc[i-1][j];if(_fib[num]){if(num==1){if(doc[i][1])//fib数列第二项{ans+=doc[i-1][1];ans++;ans%=MOD;doc[i][1]=(doc[i-1][1]+1)%MOD;doc[i][2]=(doc[i-1][1]+doc[i-1][2])%MOD;}else//fib数列第一项{ans++;doc[i][1]=(doc[i-1][1]+1)%MOD;}}else{ans+=doc[i-1][_fib[num]-1];//fib数列第三项之后ans%=MOD;if(doc[i][2])doc[i][_fib[num]]=(doc[i-1][_fib[num]]+doc[i-1][_fib[num]-1])%MOD;}}}printf("%d\n",ans);}return 0;}


EmacsNormalVim

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 申诉找回微信账号密码失败怎么办 注册微信号时验证码错误怎么办 老板让写的报道没有当天写完怎么办 洛奇英雄传镶嵌有微章的时装怎么办 上午12点用24小时制怎么办 三分钟看懂捷信个人贷款怎么办 精神不正常的父亲到单位闹怎么办 母亲和父亲一直和我闹怎么办 儿子拿了父亲的钱买手机怎么办 电动车骑的慢的时候车头打漂怎么办 二晓啊相公太爱我了怎么办全文免费 车牌被套牌了又有违章怎么办 高中生只学好主课副科学不好怎么办 母泰迪怀孕23天了不吃饭怎么办 媳妇一再触碰我的底线怎么办 发票商品编码好多选错了分类怎么办 吃了用福尔马林泡的食物怎么办 没大没小说话不尊重人的孩子怎么办 升级安卓8.0后app闪退怎么办 业主装门占用消防通道物业怎么办? 想改名字派出所不给改怎么办 物业不给地热打压影响装修怎么办 pos机pin效码验证错误怎么办 苹果下载东西要发验证码怎么办 接口断在了丝扣里面怎么办 政府下了一张关停取缔单怎么办 微信运动数据不刷新了怎么办 邻居霸占我的土地不还我该怎么办 双层水浴式杀菌锅阀门坏了怎么办 通下水管的钢丝断水管里了怎么办 塑料水管与水阀连接处漏水怎么办 介质流向标识管道温度太高怎么办 雪碧里气体太多瓶子涨得要炸怎么办 餐厅不清洗油烟管道物业该怎么办 用完权健洁净宝后奇痒的厉害怎么办 老房子铸铁暖气管从外锈蚀了怎么办 德意壁挂炉补水多了水压过高怎么办 新空调的散热片铜管漏了怎么办 猪舍被别人推掉漏电电到人怎么办? 网上买的燃气灶连接用软管怎么办 哈弗h3后减振器上支架坏了怎么办