1. 程式人生 > >洛谷P1192 臺階問題【dp遞迴】

洛谷P1192 臺階問題【dp遞迴】

有NN級的臺階,你一開始在底部,每次可以向上邁最多KK級臺階(最少11級),問到達第NN級臺階有多少種不同方式。

輸入輸出格式

輸入格式:

兩個正整數N,K。

輸出格式:

一個正整數,為不同方式數,由於答案可能很大,你需要輸出ans \bmod 100003ansmod100003後的結果。

輸入輸出樣例

輸入樣例#1: 複製

5 2

輸出樣例#1: 複製

8

說明

對於20\%20%的資料,有N ≤ 10, K ≤ 3N≤10,K≤3;

對於40\%40%的資料,有N ≤ 1000N≤1000;

對於100\%100%的資料,有N ≤ 100000,K ≤ 100N≤100000,K≤100。

思路:一道比較簡單的遞迴題,可以想一次只能最多兩個臺階時的情況,最後一階的情況數目就是dp[ j ] =dp[ j-1 ] + dp[ j-2 ],可以推廣到最多k個臺階的情況。

#include<cstdio>
#include <iostream>
#include<string>
using namespace std;
const int maxn=100005;
const int Mod=100003;
int dp[maxn];
int main()
{
    int n,k;
    scanf("%d%d",&n,&k);
    dp[0]=1,dp[1]=1;
    for(int i=2;i<=n;++i)
    {
        for(int j=1;j<=k && i-j>=0;++j)
        {
            dp[i]=(dp[i]+dp[i-j])%Mod;
        }
    }
    printf("%d\n",dp[n]);
    return 0;
}