hdu1438 鑰匙計數一


鏈接: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[N],b[N];//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;
}


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com