andre_joy

导航

hdu 1143

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1143

题意:3*n的矩形用2*1的砖堆法。

mark:wa了,两次。。一次数组只开到30了,一次循环跳出条件写错了。。囧……递推就ok了。

    我是画图一步一步推出来的。首先肯定是2个2个增加的。首先考虑不交叉的f(n) = 3*f(n-2),再考虑交叉的,会发现规律,2*(f(n-4)+f(n-6)+……)

    ps:后来看大牛的代码,发现公式化简了可以降低复杂度,虽然这题n最大才30。f(n) = 4*f(n-2)-f(n-4)

代码:

#include <stdio.h>

int main()
{
    int n,i,j,a[31] = {1};
    for(i = 1; i <= 30; i++)
    {
        if(i & 1) {a[i] = 0;continue;}
        a[i] = 3*a[i-2];
        for(j = 0 ; j < i-3; j += 2)
            a[i] += 2*a[j];
    }
    while(scanf("%d", &n), n >= 0)
        printf("%d\n", a[n]);
    return 0;
}

posted on 2012-07-03 22:21  andre_joy  阅读(97)  评论(0编辑  收藏  举报