P1192 台阶问题(递推)

题目描述

有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式。

输入输出格式

输入格式:

两个正整数N,K。

输出格式:

一个正整数,为不同方式数,由于答案可能很大,你需要输出ansmod100003后的结果。

输入输出样例

输入样例#1: 复制

5 2

输出样例#1: 复制

8

说明

对于20%20\%20%的数据,有N≤10,K≤3

对于40%40\%40%的数据,有N≤1000

对于100%100\%100%的数据,有N≤100000,K≤100

做过 k = 2 时 , f[i] = f[i-1] + f[i-2 ] ;

这里就是  f[i] =  \sum _{i=1}^{k} f[i-1]

#include<iostream>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <cstring>
#include<algorithm>
using namespace std;
const int MAX = 1000005 ;
const int inf = 0x3f3f3f3f ;
typedef long long LL ;
int n , k ;
int ans ;
int s[MAX];

int main()
{

	cin >> n >>k ;
	s[0] = 1 ;
	for(int i = 1 ; i<=n ; i++ ){
		for(int j = 1 ; j<=k && (i-j)>=0 ;j++){
			s[i]+=s[i-j] ;
			s[i]%=100003 ;
		}
		
	}
	printf("%d",s[n]);
    return 0;

}

猜你喜欢

转载自blog.csdn.net/qq_41661809/article/details/88647986