题目要求:
已知从山脚到山顶共有n个台阶,一次可爬1~a个台阶,由于年久失修,部分台阶已坏无法站立,已知坏的台阶共有m个并给出所在位置,问共有多少中登山方案?(说明:如果最后一级阶梯是坏的,则有0种登山方案,如果无法登上山顶,返回0,结果大于10^9+7,则返回除以10^9+7后的余数)
测试用例:
格式说明:
输入:总台阶数n,一次最少可爬台阶数a,最多可爬台阶数b;坏掉的台阶n,之后n行 为坏掉的台阶编号(下标从1开始)
输出:登山方案的个数,每个答案为一个整数
input:
3
1
1
0
output:
1
说明:
0 < m < 2^20 1 <= a <= b < m 0 <= n <m
分析:
采用动态规划可将本题中的问题化解为:
f(m)=f(m-a)+f(m-a-1)+…+f(m-b), 1 <= a <= b < m
但本题中还需考虑台阶损坏的问题,一旦台阶损坏,则对应的函数值置为零。
程序:
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int jumpFloor(int m,int a,int b,int *flag) {
int aa[m+1]={0};
if(m<=0) return 0;
if(m==1) return 1;
aa[a]=1;
aa[0]=1;
//cout<<aa