您的位置:首页 > 其它

hdu 1438 钥匙计数1

2011-09-23 13:17 204 查看
 
一把锁匙有N个槽,槽深为1,2,3,4。每锁匙至少有3个不同的深度且至少有1对相连的槽其深度之差为3。求这样的锁匙的总数。
递推方程式如下

1:如果X是钥匙 则X1/2/3/4也是 所以a[I]=a[I-1]*4

2: 如果X不是,X2/3是则X由1/4组成/但要除去全1和全4 所以a[I]+=(2^(I-1)-2)*2

3 如果X不是 X1/4是。则X=Y(1/4) M=X1/4=Y(4/1)(1/4)

前I-2位可以是1234,但要除去全为1/4的情况 还有就是X是钥匙且X是以1/4结尾

的情况。我们用b[I]数组表示i位时以1/4结尾的的数量

   temp=4^(i-2)-2^(i-2)-b[i-1];

则 b[i]=a[i-1]*2+temp;

代码如下:

#include<stdio.h>

#include<math.h>
int main()

{

    int
i;

    __int64
temp,a[32],b[32];//b[i]记录以1
4结尾的数
    a[2]=0;

    a[3]=8;

    b[2]=0;

    b[3]=4;

    printf("N=2: 0\nN=3: 8\n");

    for(
i=4;i<=31;i++)

    {


        a[i]=a[i-1]*4;

        a[i]+=(__int64)pow(2,i)-4;//以2
3 结尾的
        temp=((__int64)pow(4,i-2)-(__int64)pow(2,i-2))*2-b[i-1];

        a[i]+=temp;

        b[i]=a[i-1]*2+temp;

        printf("N=%d: %I64d\n",i,a[i]);

    }

return
0;   

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: