可恶的铺地砖(1*2铺n*3)

题目描述

道路需要铺设地砖,这条道路由 n×3 个方格组成。只有一种规格的地砖,大小是 1×2 规格的,也就是恰好可以覆盖两个方格。请计算有多少种方法,将这条道路铺满地砖。
由于方案数可能很大,输出它模 1,000,000,007 的余数即可。

输入

一行,一个整数n(1 < n <= 200000,保证n为偶数)

输出

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

样例输入 Copy
【样例1】
2
【样例3】
8
样例输出 Copy
【样例1】
3
【样例3】
153

烦死了可能就是画图找规律吧,还有去重。线性DP。为什么好多题目归在递推里面不能用递推做会超时啊??做不了一点呢哈哈

可恶的铺地砖(1*2铺n*3)_第1张图片

代码

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 

using namespace std;
typedef long long ll;

int qq[20]{ 0 }, c = 1;
int o(int w) {//判断放置是否合法
    for (int i = 0;i < w;i++) {
        if (qq[i] == qq[w])return 0;//同列
        if (qq[i] - i == qq[w] - w)return 0;//正对角
        if (qq[i] + i == qq[w] + w)return 0;//副对角
    }
    return 1;
}

void bn(int w) {
    if (w == 8) {//放完了说明可以就输出
        cout <<"No."<

你可能感兴趣的:(动态规划,算法)