ZOJ2771题解DP

 1 仔细分析题目可得到当反射次数为奇数时光想从上面射出,
2 当反射次数为偶数时光线从下面射出。所以分奇数和偶数
3 两种情况考虑。
4 奇数:每个面的光线数目等于本平面上个反射点的光线数目;
5 偶数:每个面的光线树木等于本平面下面的那个反射点的数目;
6 所以有递推关系式可以得到L[i][j] += L[i-1][k];表示i个光线
7 反射的线路数目。
8 #include<stdio.h>
9 #include<string.h>
10
11 long long L[60][4], sum;
12 int main()
13 {
14 int i, j, k, n;
15 memset(L, 0L, sizeof(L));
16 L[0][0] = 1L;
17
18 for(i=1; i<=60; i++)
19 for(j=0; j<=3; j++)
20 {
21 if(i%2 == 1)
22 {
23 for(k=0; k<j; k++)
24 L[i][j] += L[i-1][k];
25 }
26 else
27 {
28 for(k=j+1; k<=3; k++)
29 L[i][j] += L[i-1][k];
30 }
31 }
32 while(scanf("%d", &n) != EOF)
33 {
34 sum = 0;
35 for(i=0; i<3; i++)
36 sum += L[n][i+n%2];
37 printf("%lld\n", sum);
38 }
39 return 0;
40 }

转载于:https://www.cnblogs.com/cn19901203/archive/2012/02/25/2367874.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值