Easy的灯光(斐波那契数列)

问题 1241 --Easy的灯光

1241: Easy的灯光

时间限制: 1 Sec  内存限制: 128 MB
提交: 25  解决: 20
[提交][状态][讨论版][命题人:admin]

题目描述

Easy旅游结束了,但是他花了太多的钱,所以他兼职当上了灯光师。

某天他为某公司的庆典设计灯光,一共有N个灯泡,N个灯泡排列成一排。

这个公司的老总不喜欢连续两个灯泡都亮着,那么Easy想知道一共有几种灯光开关方式,

比如如果一排有3个灯泡,那么我们用0表示关灯 1表示开灯,那么合法的方案有:

1. 000 所有灯全灭

2. 100  第1盏灯亮

3. 010  第2盏灯亮

4. 001  第3盏灯亮

5. 101  第1盏和第3盏灯亮

其它的方案,比如110,111,011由于有连续的两个灯泡亮着,所以不合法,所以当只有3盏灯时,就有5种合法的方案

现在,Easy想知道合法方案的种类数,这个数字可能很大,所以请你输出其对1000000007取模之后的值

输入

数据只有一行一个整数n,代表灯泡的数量(1<=N<=20000)

输出

输出只有一个整数为合法方案的种类,这个数字可能很大,所以请你输出其对1000000007取模之后的值

样例输入

30

样例输出

2178309

蓝桥杯国赛的时候第二题!可惜自己太菜,心痛;

从0开始找规律发现是个斐波那契,很简单;

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
#include <string>
#include <queue>
#include <stack>
#include <set>
using namespace std;
typedef long long ll;
 
int main( )
{
    int a[20010] ={1,2,3};
    int mod = 1e9+7;
    int i,j;
    for(i = 3;i<=20000;i++)
        a[i] = (a[i-1]+a[i-2])%mod;
    int n;
    cin >> n;
    cout <<a[n] <<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42754600/article/details/81362738