我想了很久真的做不出来,忍不住求人了!求大神们讲解一下解题思路!新手上路,求老司机带带,
//动态DP思想
//创建一个39*2数组的二维数组s[i][j]
//i表示第N级台阶,j表示在该台阶上为左脚0,右脚1
//s[i][j]表示在i级台阶,刚好为j脚,总共可能得情况个数
int[][] s = new int[39][2];
//定义初始值,数组是从0-38,表示1-39级台阶
//以下四个初始值你都不理解得话,别学编程了
s[0][0]=1;//第一级台阶,左脚的情况个数只有1次
s[0][1]=0;//第一级台阶,右脚的情况个数只有0次,因为第一次漫的必定为左脚
s[1][0]=1;//第二级台阶,左脚的情况个数只有1次
s[1][1]=1;//第二级台阶,右脚的情况个数只有1次
//循环计算
for(int i = 2;i<39;i++){
//s[i][0]的值刚好是s[i-1][1]的情况再漫左脚一个台阶,刚好到达s[i][0]
//或者s[i-2][1]的情况再漫左脚两个台阶,刚好到达s[i][0]
//所以s[i][0]的值等于以上两个之和
s[i][0] = s[i-1][1] + s[i-2][1];
//原理同上
s[i][1] = s[i-1][0] + s[i-2][0];
}
第一次看到这么有耐心的人解答!爱你❤❤❤❤❤❤❤