SCUT J.O: 百步梯

本文介绍了一道经典的算法题目——百步梯问题。通过动态规划的方法解决了如何计算从地面到达指定台阶的不同走法数量的问题,并提供了完整的代码实现。

百步梯


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热身赛第一场

 

 

SCUT?我的学校,哈哈哈,虽然我们自己OJ上题还不是很多,服务器也不太给力,不过一些题目还是不错的。

短短几行代码,想了很久,其实这类题挺经典的

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种


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值