您的位置:首页 > 其它

hdu1438 钥匙计数一

2012-03-08 16:21 99 查看
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1438

第一次这么认真的做了一道递推的题目,好题啊!

要是自己想还是好吃力,看了解题报告感觉思路好清晰。看解题报告是很不好的习惯,可是菜没办法。。。。。。。。。。呼呼

递推方程:

1 如果X是钥匙,则X1/2/3/4也是。

2如果X不是钥匙,X2/3是。则X是由1和4组成的,除去全部由1或4组成的。

3如果X不是钥匙,X14和X41是。则前i-2位是由1,2,3,4组合成的。但要除去全是1和4的情况,还有就是X是钥匙且X是以1/4结尾

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

#include<stdio.h>

#include<math.h>

#define N 35

int main()

{

__int64 a
,b
;//a[i]计算钥匙的总数,b[i]计算以1或4结尾的钥匙总数

__int64 temp;

int i;

a[2] = 0;

b[2] = 0;

a[3] = 8;

b[3] = 4;

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

{

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

a[i] += (__int64)(pow(2,i-1)*2)-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;

}

for(i = 2;i<32;i++)

{

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

}

return 0;

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