问题 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;
}