洛谷P1192 臺階問題【dp遞迴】
阿新 • • 發佈:2018-12-14
有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; }