Advertisement

上海计算机学会2021年12月月赛C++乙组T1四铺地砖

阅读量:

题目描述

一条道路需要用地砖进行铺设工作。这条路段由n乘以二个方格构成,在铺设过程中需要用到两种不同规格的地砖——一种是长度为一宽为二的类型(即每块可覆盖相邻的两个方格),另一种则为正方形大小(尺寸为二乘二)。由于这两种类型的瓷砖都有足够的供应量可用,请问有多少种不同的铺设方式能够满足整个路段的要求。

由于方案数可能很大,输出它模 1,000,000,007 的余数即可。

输入格式

单个整数:表示 n。

输出格式

单个整数:表示方案数模 1,000,000,007 的余数。

数据范围

  • 对于 30% 的数据,1≤n≤15;
  • 对于 70% 的数据,1≤n≤50000;
  • 对于 100% 的数据,1≤n≤100000。

样例数据

输入:
2
输出:
3
输入:
8
输出:
171

此题可采用递推法来解决

所以a[i] = (a[i - 1] + 2 * a[i - 2])

详见代码:

复制代码
 #include <bits/stdc++.h>

    
 using namespace std;
    
 long long a[100005];
    
  
    
 int main() {
    
     int n;
    
     cin >> n;
    
     a[1] = 1;
    
     a[2] = 3;
    
     for (int i = 3; i <= n; i++) {
    
     a[i] = (a[i - 1] + 2 * a[i - 2]) % (1000000007);
    
     }
    
     cout << a[n] << endl;
    
     return 0;
    
 }

全部评论 (0)

还没有任何评论哟~