百步梯
Time Limit: |
1000MS |
Memory Limit: |
32768K |
Description
华工有一处非常著名的景观:百步梯。
假设百步梯有N级台阶,而小旭同学每次有M种选择,每种选择对应登上Ci(1<=i<=M)级台阶小旭同学很想知道登上百步梯有多少种走法,但是他怎么也算不出,你能帮助他吗?要求:必须恰好登上第N级台阶,越过不算。
例如N为10时,1->5->10是一种方法,而1->5->12则不算。
数据保证所求种走法总数小于等于2^31
Input
输入包括
第一行包含两个整数N和M,表示共有N级台阶,M种走法。(0<=N<=1000,0<=M<=20)
第二行包含M个整数,第i个记为Ci,表示一次登上Ci级台阶。(Ci>=0)
Output
输出包含一行,这一行只包含一个整数,表示总的走法数目。
Sample Input
5 3
1 2 4
Sample Output
6
Hint
No hint.
Source
acm热身赛第一场
短短几行代码,想了很久,其实这类题挺经典的
1、注意是从第一级台阶开始爬的
2、相同组合不同顺序算为不同的走法
下面是推理过程,按照这组数据:
》可以走的步法是1步、2步和4步
》初始化1;
》1:1 1种
总计1种
》2:1→2 1步 1种
总计1种
》3:1→3 2步 1种
2→3 1步 1种
总计2种
》4:1→4 3步 0种
2→4 2步 1种
3→4 1步 2种
总计3种
》5:1→5 4步 1种
2→5 3步 0种
3→5 2步 2种
4→5 1步 3种
总计6种
本文介绍了一道经典的算法题目——百步梯问题。通过动态规划的方法解决了如何计算从地面到达指定台阶的不同走法数量的问题,并提供了完整的代码实现。
778

被折叠的 条评论
为什么被折叠?



