0
点赞
收藏
分享

微信扫一扫

P1192 台阶问题

君之言之 2022-01-26 阅读 33


​​P1192 台阶问题​​

1.问题

见题目

2.分析


  • 具有子问题特性,需分治(递归)解决
  • 类似​​Fibonacci​​数列问题
  • 建立适当的递推式即可
  • 需要在适当的地方运用数论的知识 [​​(a+b) mod n =((a mod n)+(b mod n)) mod n​​ ]

3.代码

#include<iostream>
using namespace std;

const int maxN = 100005;
typedef long long ll;
int k ;
ll f[maxN];

//n级台阶需要迈的次数
int cal(int n){
if(n==1 || n==0)
return f[n];

//可以选择迈1-k步
//注意i的取值范围,这个很关键
for(int i = 1;i<=k && i<=n;i++){
if(f[n-i]!=0)
f[n] += f[n-i];
else
f[n] = f[n] + cal(n-i);
f[n] = f[n] % 100003;
}
return f[n];
}

int main(){
int n;
cin >> n>> k;
fill(f,f+maxN,0);
f[0] = f[1] = 1;
cal(n);
cout << f[n] % 100003;
}



举报

相关推荐

0 条评论