Tiling_easy version
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3791 Accepted Submission(s): 2991
Problem Description
有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法。
Input
输入的第一行包含一个正整数T(T<=20),表示一共有 T组数据,接着是T行数据,每行包含一个正整数N(N<=30),表示网格的大小是2行N列。
Output
输出一共有多少种铺设的方法,每组数据的输出占一行。
Sample Input
3 2 8 12
Sample Output
3 171 2731
/*
思路:找规律DP[i] = DP[i-1] + 2*DP[i-2] ,(i>=1 && i<=40 );
*/
#include<iostream>
using namespace std ;
int DP[32];
void fun()
{
int i ;
DP[1] = 1;
DP[2] = 3;
for( i = 3; i <= 30 ; i ++)
DP[i] = DP[i-1] +2* DP[i-2] ;
return ;
}
int main(void)
{
int t ;
fun();
cin >> t ;
while(t --)
{
int n ;
cin >> n ;
cout<<DP[n]<<endl;
}
return 0;
}

本文探讨了一个经典的组合数学问题——使用2x1和2x2两种规格的骨牌来铺满2xN的网格,寻找不同铺法的数量。通过动态规划方法找到递推公式并实现算法。
750

被折叠的 条评论
为什么被折叠?



