P1192 台阶问题(C++_递推)
作者:互联网
题目描述
有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式。
输入格式
两个正整数N,K。
输出格式
一个正整数,为不同方式数,由于答案可能很大,你需要输出ans mod 100003后的结果。
输入输出样例
输入 #1
5 2
输出 #1
8
说明/提示
对于20%的数据,有N≤10,K≤3;
对于40%的数据,有N≤1000;
对于100%的数据,有N≤100000,K≤100。
思路
递推公式就是:
i<=k: ans[i]=2i;
i>k: ans[i]=2*ans[i-1]*ans[i-1-k];
源码
#include<bits/stdc++.h>
using namespace std;
long long n, k, ans[100001];
int main()
{
cin >> n >> k;
ans[0] = ans[1] = 1;
for (int i = 2; i <= n; i++)
if (i <= k)
ans[i] = (ans[i - 1] << 1) % 100003;
else
ans[i] = (2 * ans[i - 1] - ans[i - 1 - k] + 100003) % 100003;
cout << ans[n];
return 0;
}
ccql
发布了156 篇原创文章 · 获赞 30 · 访问量 8463
私信
关注
标签:输出,台阶,int,C++,long,ans,P1192,递推 来源: https://blog.csdn.net/qq_43510916/article/details/104149166