其他分享
首页 > 其他分享> > P1192 台阶问题

P1192 台阶问题

作者:互联网

题目描述

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

输入格式

两个正整数N,K。

输出格式

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

输入输出样例

输入 #1
5 2
输出 #1
8

说明/提示

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

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

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

 

我是区分了k之前和k之后的方法数:

k之前:f[n]=f[1]+...+f[n-1]+1;

k之后: f[n]=f[1]+...+f[n-1];

你们可以自行验证,代码也有解释。

 

#include<iostream>
using namespace std;
int f[1000001];
int main(){
  int n,k;
 cin>>n>>k;
 f[1]=1;
 //记录k之前的各方法数;
    for(int i=2;i<=k;i++){
     for(int j=1;j<i;j++){
      f[i]+=f[j];
  } 
  f[i]+=1;//当小于k时,各方法数等于f[n]=f[1]+...+f[n-1]+1  其中最后1为新增的,直接一步到终点;
  f[i]=f[i]%100003;//注意取模
 }
 //当n大于k时,f[n]=f[1]+...+f[n-1];
  for(int j=k+1;j<=n;j++){
   for(int i=1;i<=k;i++){
   f[j]+=f[j-i];
  }
  f[j]=f[j]%100003;
 }
 cout<<f[n];
 return 0;
}

本人小白,如有错误,欢迎指正,谢谢^~^。

标签:输出,台阶,int,问题,100003,正整数,P1192,+...+
来源: https://www.cnblogs.com/nqc123/p/11297283.html