2016级算法第一次上机——C AlvinZH去图书馆
来源:互联网 发布:程序员改行能做什么 编辑:程序博客网 时间:2024/06/05 09:45
C AlvinZH去图书馆
时间限制:500ms 内存限制:32768kb
题目描述
AlvinZH最近在看《冰与火之歌》系列,这天,他又看完了一本书,于是决定去图书馆再借一本。大家知道,在去图书馆的路上,有一条“扯蛋路”。大概是这个样子的(秀一波拍照技术):
AlvinZH从第一块石砖出发,接下来他可以走到第二块石砖或第三块石砖,有时候走的很不爽,甚至可以直接跨过两个石砖,到达第四块石砖,但是不能连续两次这种操作,因为这样。。。对身体不好。现在假设有一条含n块石砖的小路,请你计算出AlvinZH从第一块石砖出发有多少种安全的走法。
输入
输入将由多组测试数据组成,以EOF结尾。
每组数据只有一行,为小路的总石砖数n(0<n≤50)。
输出
对于每组数据,输出一行,为走过小路的方法数。
输入样例
123
输出样例
124
样例解释
1:一步走完;
2:先走到2再走完,或者直接走完;
3:111或12或21或3。
题目分析
解法一:我们可以这样想,到达n这个点可以是来自n-1、n-2、n-3这三个位置的,我们用a[i]表示到达位置i的方法数,则按理来说a[n]=a[n-1]+a[n-2]+a[n-3]的,但是本题有一个要求,不能连续两次跨三步,所以并不能直接加a[n-3],必须保证n-3这个点的前一步不是3块砖,所以应该加的是a[n-4]+a[n-5].
所以到达位置n的方法数a[n]=a[i-4]+a[i-5]+a[i-2]+a[i-1];
参考代码一:
#include<cstdio>int main(){ int n; long long a[51]; a[1]=1;a[2]=2;a[3]=4;a[4]=7;a[5]=13; while(scanf("%d",&n)!=EOF) { for(int i=6;i<=n;i++) a[i]=a[i-4]+a[i-5]+a[i-2]+a[i-1]; printf("%lld\n",a[n]); }}
解法二:我们可以用一个二维数组来解题,其中a[0][i]表示用两步或一步到达i点,a[1][i]表示三步到达i点,这样更容易理解。
这样的话,a[0][i]=a[0][i-1]+a[1][i-1]+a[0][i-2]+a[1][i-2]; a[1][i]=a[0][i-3].
总方法数的话,两个加起来就行了。
参考代码二:
#include<cstdio>int main(){ int n; long long a[2][57]; a[0][1]=1;a[1][1]=0; a[0][2]=2;a[1][2]=0; a[0][3]=3;a[1][3]=1; while(scanf("%d",&n)!=EOF) { for(int i=4;i<=n;i++) { a[0][i]=a[0][i-1]+a[1][i-1]+a[0][i-2]+a[1][i-2]; a[1][i]=a[0][i-3]; } printf("%lld\n",a[0][n]+a[1][n]); }}
- 2016级算法第一次上机——C AlvinZH去图书馆
- 上机一 C AlvinZH去图书馆
- 2016算法第一次练习赛——D AlvinZH的儿时回忆——跳房子
- 2016级算法第二次练习赛——AlvinZH掉坑系列(动态规划)
- 上机一 F AlvinZH的儿时梦想——木匠篇
- 2016级算法第一次上机——A The stupid owls
- 2016级算法第一次上机——B ModricWang和数论
- 2016级算法第一次上机——D 水水的Horner Rule
- 2016级算法第一次上机——E ModricWang's QuickSort
- 2016级算法第二次练习赛——背包&DP大作战——U AlvinZH的奇幻猜想——合数篇
- 15级算法第一次上机解题报告
- 第一次上机试验—2
- 第一次上机实验—3
- 第一次上机实验—2
- 第一次上机实验—2
- 第一次上机实验—1
- 第一次C程序设计上机报告
- 第一次C程序设计上机报告
- RecycleView多条目加载
- RealerView里
- 软工3——微信作业
- DbSqlMapper
- GDB调试
- 2016级算法第一次上机——C AlvinZH去图书馆
- Android IPC机制之Messenger的使用
- java语言实现简单的选择排序
- C++构造函数的执行顺序及析构函数的执行顺序-多种情况:普通继承、虚拟继承、类构造函数调用其它类的构造函数
- 成绩排序
- 排序问题
- 小迪教程第四天——Php+mysql注入
- TCP/IP协议 三次握手与四次挥手
- BZOJ 3106 [cqoi 2013] 对抗搜索 解题报告