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;
}
第一次这么认真的做了一道递推的题目,好题啊!
要是自己想还是好吃力,看了解题报告感觉思路好清晰。看解题报告是很不好的习惯,可是菜没办法。。。。。。。。。。呼呼
递推方程:
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;
}
相关文章推荐
- HDU 1438 钥匙计数之一(状压DP->四维数组求满足要求的状态的方法数)
- hdu1438 钥匙计数之一
- hdu 1438钥匙计数
- hdu 1438 钥匙计数之一(DP状态压缩)
- hdu 1438 - 钥匙计数之一
- hdu 1438 钥匙计数之一(DP状态压缩)
- hdu 1438 钥匙计数1
- HDU-1438 钥匙计数之一
- hdu-1438 钥匙计数之一
- HDU - 1438:钥匙计数之一
- HDU 1438 钥匙计数之一 递推+组合 简洁的做法
- 钥匙计数之一 - HDU 1438(状态压缩打表)
- 杭电1438 钥匙计数一
- HDU yt13递推1008钥匙计数之一
- HDU---1480-钥匙计数之二
- hdu 1480 钥匙计数之二
- hdu 1480 钥匙计数之二
- HDU 1480 钥匙计数二
- 递推—杭电1438 钥匙计数之一(待解决)
- HDU 1483 钥匙计数之一(详细过程)