代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
题目描述
现用若干砖去铺满一条长度为N的路,不允许重叠和超出,问有多少种不同的铺法 已知砖的长度为奇数,如1,3,5,7,9…
输入格式
第一行为一个整数T(1<=T<=30) 接下来T行,每行一个整数N(0<=n<=1000)
输出格式
对于每个测试样例,输出对应的答案 由于答案可能很大,结果对1e9+7取模
输入样例
2
2
5
输出样例
1
5
个人思路
很明显是斐波那契数列,原理即x[i]=x[i-1]+x[i-2];
因为题目时间复杂度相对没那么严格,所以用单个数组进行逐个存储计算会是一个比较省事的方法,相对用两个变量来回交换更改上一个及上上一个值来说更无脑。
因为n最大为1000,题目也有提醒对1e9+7取模,计算到最后再进行取模中间必然会有内存溢出的问题,所以对每一次操作都进行取模运算即可
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
int a;
cin>>a;
int x[a];
x[1]=1;
x[2]=1;
for(int i=3;i<=a;i++)
{
x[i]=x[i-1]+x[i-2];
x[i]%=(int)(1e9+7);
}
if(a==0)
{
cout<<1<<endl;
continue;
}
else
cout<<x[a]%(int)(1e9+7)<<endl;
}
}