首页 > 代码库 > hdu1143 Tri Tiling(递推)
hdu1143 Tri Tiling(递推)
题目链接:
huangjing
首先考虑长为奇数的情况,你试着画几个就会发现那个根本不可能成立,所以只有长度为偶数的情况才可以。。
然后就会发现除了2这种特殊情况外,其余的2 4 6 8都只有两种情况
具体参看 http://blog.csdn.net/chaoojie/article/details/8860935
把 4, 6, 8.... 看成一整块,就有下图两种情况(正着,倒着)
那么递推公式就出来了
F[N]=F[2]*F[N-2]+F[4]*F[N-4]+.......F[N]*F[0]
F[N-2]=F[2]*F[N-4]+F[4]*F[N-6]+......F[N-2]*F[0]
又我们刚才得出结论除了F[2]=3,其余的都等于2
所以两个式子相减得到
F[N]=4*F[N-2]-F[N-4]
直接打表计算即可。。。
代码:
#include<cstdio> #include<cstring> const int maxn=31+10; int dp[maxn],n; int main() { dp[0]=1; dp[2]=3; for(int i=4;i<=32;i++) dp[i]=4*dp[i-2]-dp[i-4]; while(~scanf("%d",&n)&&n!=-1) { if(n%2) printf("0\n"); else printf("%d\n",dp[n]); } return 0; }
hdu1143 Tri Tiling(递推)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。