洛谷P1192台阶问题(DP)
题目描述
有NNN级的台阶,你一开始在底部,每次可以向上迈最多KKK级台阶(最少111级),问到达第NNN级台阶有多少种不同方式。
输入格式
两个正整数N,K。
输出格式
一个正整数,为不同方式数,由于答案可能很大,你需要输出ans mod 100003ans \bmod 100003ansmod100003后的结果。
#include <bits/stdc++.h> using namespace std; int f[100005]={0};//dp数组 int N,K; void calc(int cnt) { int ans=0; if(cnt<=K)return;//当前位置的值在初始化时已经得到了的话直接return; else { int i; for(i=cnt-K;i<=cnt-1;i++) { ans=(ans+f[i])%100003;//边加边模 } f[cnt]=ans;//记录答案 } } int main() { cin>>N>>K; int i; for(i=1;i<=K;i++)//初始化dp数组1-k的值 { if(i==1)f[1]=1; else { int j; f[i]=1; for(j=1;j<=i-1;j++) { f[i]=(f[i]+f[j])%100003; } } } for(i=1;i<=N;i++) { calc(i);//计算f[i] } cout<<f[N]%100003; return 0; }