【动态规划入门】小马跳楼梯
此题为入门级动态规划算法题,题目来源计科老班
题目描述
计科小马在地面,面前有一楼梯共M级。若每次只能向上跳1级,4级或7级,那么要走上第M级,共有多少种走法?
输入
输入数据每行包含一个整数M(1<=M<=10000),表示楼梯的级数。以0表示结束。
输出
对于每个测试实例,请输出不同走法的数量。由于数值比较大输出对20170920的余数。
样例输入
2
3
4
5
6
7
8
9
0
样例输出
1
1
2
3
4
6
9
13
思路详解
此题数据庞大,应该采用动态规划,将原问题分解为若干个子问题,先求解子问题,然后从这些子问题得解得到原问题的解。
这道题,小马每次只能够跳一阶,四阶,七阶,则第i阶的走法,则由i-1,i-4,i-7阶的走法组成,用一个足够大的数组来存放子问题的解,最终得到原问题的解。
代码
import java.util.Scanner;
public class JumpStepsDynamicProgramming {
int[] A;
int M;
public JumpStepsDynamicProgramming() {
Scanner sc=new Scanner(System.in);
A=new int[10010];
A[0]=1;
while(true) {
M=sc.nextInt();
if(M == 0) return;
for(int i=1;i<=M;i++) {
int sum=0;
if(i>=1) sum+=A[i-1];
if(i>=4) sum+=A[i-4];
if(i>=7) sum+=A[i-7];
A[i]=sum%20170920;
}
System.out.println(A[M]);
}
}
public static void main(String[] args) {
JumpStepsDynamicProgramming j=new JumpStepsDynamicProgramming();
}
}