上楼梯
2016-03-11 22:08
260 查看
问题描述:
有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶, 2阶, 3阶。实现一个方法,计算小孩有多少种上楼梯的方式。
有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶, 2阶, 3阶。实现一个方法,计算小孩有多少种上楼梯的方式。
#include<stdio.h> int rec[20]; int fun(int n) { if (n == 1) return rec[1] = 1; else if (n == 2) return rec[2] = 2; else if (n == 3) return rec[3] = 4; else { rec = fun(n-1) + fun(n-2) + fun(n-3); return rec ; } } int main() { int n; while (~scanf("%d", &n)) { rec[1] = 1, rec[2] = 2, rec[3] = 4; for (int i = 4; i <= n; i++) rec[i] = rec[i-1] + rec[i-2] + rec[i-3]; //总共走i个阶梯的时候,其方法数 = 如果当前跨一步时剩下(i-1)阶楼梯的走法数 + 如果当前跨两步时剩下(i-2)阶楼梯的走法数 + //如果当前跨三步时剩下(i-3)阶楼梯的走法数 //此时,i的规模在逐渐减小,化为与原来问题相同的子问题 //当前i阶楼梯的走法数,并不影响大于i阶楼梯的走法数,但却依赖于前面小于i阶楼梯的走法数 (动态规划无后效性),以自底向上的方式得到解 printf("rec :%d\n", rec ); printf("fun(n):%d\n", fun(n)); } }
相关文章推荐
- typedef引起的bug
- Sicily 1047 Super Snooker
- Linux平台weblogic集群安装(一)
- 表格里使用text-overflow后不能隐藏超出的文本的解决方法
- struts2标签库
- leetcode:268. Missing Number(Java)解答
- UWP开发入门(九)——简单界面的布局技巧及屏幕适应
- 实验0 了解和熟悉操作系统
- 逻辑卷管理LVM
- lastChild和firstChild的区别
- CODE[VS] 1039 数的划分
- 欢迎使用CSDN-markdown编辑器
- At91sam9g35K烧录Linux系统
- 【Scala】Cake模式和依赖注入
- Bzoj 1227: [SDOI2009]虔诚的墓主人 树状数组,离散化,组合数学
- [android] 常用数据适配器SimpleAdapter
- CodeForces-630 G. Challenge Pennants【排列组合】
- 上班路上快一倍,长途出门快一半
- UITableView和UICollectionView列表出现重叠问题
- 链表的创建,插入,删除和打印