本文主要是介绍积木画(动态规划c++实现),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
小明最近迷上了积木画,有这么两种类型的积木,分别为 I 型(大小为 2 个单位面积)和 L 型(大小为 3 个单位面积):
同时,小明有一块面积大小为 2×N 的画布,画布由 2×N 个 1×1 区域构成。
小明需要用以上两种积木将画布拼满,他想知道总共有多少种不同的方式?
积木可以任意旋转,且画布的方向固定。
输入
输入一个整数 N,表示画布大小。
输出
输出一个整数表示答案。
由于答案可能很大,所以输出其对 1000000007 取模后的值。
样例
输入样例:
3
输出样例:
5
代码
#include<iostream>
using namespace std;
const int N = 1e7+10,MOD = 1000000007;
int g[4][4]={{1,1,1,1},{0,0,1,1},{0,1,0,1},{1,0,0,0}
};
int f[N][4];
int n;
int main(){scanf("%d",&n);f[1][0] = 1;for(int i=1;i<=n;i++){for(int j=0;j<4;j++){for(int k=0;k<4;k++){f[i+1][k] = (f[i+1][k]+f[i][j]*g[j][k])%MOD;}}}printf("%d",f[n+1][0]);
}
这篇关于积木画(动态规划c++实现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!