蓝桥杯 第39级台阶 DP
2015-03-05 10:41
197 查看
题目描述:
小明刚刚看完电影《第39级台阶》,离开电影院的时候, 他数了数礼堂前的台阶数,恰好是39级!
站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶。 先迈左脚,然后左右交替,最后一步是迈右脚, 也就是
说一共要走偶数步。那么,上完39级台阶, 有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。
要求提交的是一个整数。 注意:不要提交解答过程,或其它的辅助说明文字。
基本思路:
将两步合并成一步,就化作了最基本的那种DP
相当于每两步可走2 ,3,4阶台阶,但是需要注意,这里的2,3,4阶台阶都是由两步合并
而来的。因此本身就有集中可能。
记base数组:base【i】表示两步恰好跨过的i阶台阶有几种可能性
如:base【1】=0;表示不可能两步恰好跨过1阶台阶
base【1】=0,base【2】=1,base【3】=2,base【4】=1;
状态转移方程:F[i]=F[i-1]*base[1]+F[i-2]*base[2]+F[i-3]*base[3]+F[i-4]*base[4];
代码实现:
运行结果:
小明刚刚看完电影《第39级台阶》,离开电影院的时候, 他数了数礼堂前的台阶数,恰好是39级!
站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶。 先迈左脚,然后左右交替,最后一步是迈右脚, 也就是
说一共要走偶数步。那么,上完39级台阶, 有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。
要求提交的是一个整数。 注意:不要提交解答过程,或其它的辅助说明文字。
基本思路:
将两步合并成一步,就化作了最基本的那种DP
相当于每两步可走2 ,3,4阶台阶,但是需要注意,这里的2,3,4阶台阶都是由两步合并
而来的。因此本身就有集中可能。
记base数组:base【i】表示两步恰好跨过的i阶台阶有几种可能性
如:base【1】=0;表示不可能两步恰好跨过1阶台阶
base【1】=0,base【2】=1,base【3】=2,base【4】=1;
状态转移方程:F[i]=F[i-1]*base[1]+F[i-2]*base[2]+F[i-3]*base[3]+F[i-4]*base[4];
代码实现:
#include<stdio.h> int F[100];//记录偶数步到第i阶台阶的情况数 int base[5]={0,0,1,2,1};//表示两步恰好跨过的i阶台阶有几种可能性 int main() { int i; F[1]=0; F[2]=1; F[3]=2; F[4]=2; for(i=5;i<=40;i++) F[i]=F[i-1]*base[1]+F[i-2]*base[2]+F[i-3]*base[3]+F[i-4]*base[4]; printf("%d\n",F[39]); return 0; }
运行结果:
相关文章推荐
- 2013蓝桥杯 【初赛试题】 第39级台阶
- 第39级台阶 蓝桥杯递归 java
- 蓝桥杯 第39级台阶
- 蓝桥杯 C本科B组 第39级台阶
- 2013蓝桥杯 -- 第39级台阶
- 2013蓝桥杯 【初赛试题】 第39级台阶
- 【蓝桥杯】【第39级台阶】
- 第39级台阶 蓝桥杯
- 蓝桥杯第四届题3之第39级台阶
- 2013年第四届蓝桥杯C/C++省赛 第39级台阶(结果填空) ----DFS深度搜索遍历和暴力搜索
- 蓝桥杯--第39级台阶
- 2013第四届蓝桥杯 04 第39级台阶(java)
- 蓝桥杯--第39级台阶
- 第四届 蓝桥杯C/C++ B组:第3题第39级台阶
- 第四届蓝桥杯第39级台阶(结果填空)
- 2013蓝桥杯 CC++程序设计本科B组 第39级台阶
- 第四届蓝桥杯【省赛试题3】第39级台阶
- 第39级台阶-第四届蓝桥杯c/c++B组
- 2013蓝桥杯第39级台阶
- 第39级台阶(dp)