1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include
24 using namespace std;
25 const int N=1001;
26 const int M=100;
27 const int Max=100000000;
28 struct Big
29 {
30 int s[M];
31 int len;
32 };
33 Big f[N];
34 void Add(Big &a,Big &b,Big &c,Big &d)
35 {
36 d.len=a.len;
37 int t=0;
38 for(int i=0;i<d.len;i++)
39 {
40 t+=a.s[i]+b.s[i]+c.s[i];
41 d.s[i]=t%Max;
42 t=t/Max;
43 }
44 if(t>0)
45 {
46 d.s[d.len]=t;
47 d.len++;
48 }
49 }
50 void OutPut(Big &a)
51 {
52 int i=a.len-1;
53 printf("%d",a.s[i]);
54 for(i=a.len-2;i>=0;i--)
55 printf("%08d",a.s[i]);
56 printf("\n");
57 }
58 void Init()
59 {
60 f[0].s[0]=1;f[0].len=1;
61 f[1].s[0]=1;f[1].len=1;
62 f[2].s[0]=2;f[2].len=1;
63 f[3].s[0]=4;f[3].len=1;
64 for(int i=4;i<N;i++)
65 {
66 Add(f[i-1],f[i-2],f[i-4],f[i]);
67 }
68
69 }
70
71 int main()
72 {
73 int n;
74 Init();
75 while(scanf("%d",&n)!=EOF)
76 {
77 OutPut(f[n]);
78 }
79 }
hdu1297 参考答案 (2008-09-26 09:47:35由czk编辑)