#include <cstdlib>
#include <cstdio>
#include <cstring>
const int maxn = 30 + 5;
int dp[maxn][maxn];//用dp[i][j]表示(3 X i) + j个多余块的摆放方案数
int main() {
//freopen("data.in", "r", stdin);
int n;
while(scanf("%d", &n) == 1 && n >= 0) {
//题解分析见https://blog.csdn.net/whereisherofrom/article/details/78922215
if(n % 2 == 1) {//首先可以明确当N等于奇数的时候,方案数一定为0
printf("0\n");
continue;
}
dp[0][0] = dp[1][1] = dp[0][2] = 1;
for(int i = 2; i <= n; i++) {
dp[i][0] = dp[i-2][0] + dp[i-1][1] + dp[i-2][2];
dp[i][1] = dp[i-1][2];
dp[i][2] = dp[i][0] + dp[i-1][1];
}
printf("%d\n", dp[n][0]);
}
return 0;
}
HDU 1143 Tri Tiling(DP)
最新推荐文章于 2018-07-04 08:26:10 发布