编程语言
首页 > 编程语言> > P1192 台阶问题(C++_递推)

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