题目名字 台阶问题
题意
求可以走多少个台阶
思路
- dp[i]表示将i个物品分成k个组合的方案数。在每次循环中,我们枚举j从1到k,如果i>=j,则将dp[i-j]加到dp[i]上。最终输出dp[n]即可得到将n个物品分成k个组合的方案数。需要注意的是,由于方案数可能非常大,因此需要对M取模。
算法一:递归
代码
#include<iostream>
#include<cstring>
using namespace std;
const int x=1e6+10;
int n,k;
int dp[x];
int M=100003;
int main(){
dp[0]=1;
cin>>n>>k;
for(int i=0;i<=n;i++){
for(int j=1;j<=k;j++){
if(i>=j){
dp[i]=(dp[i]+dp[i-j])%M;
}
}
}
cout<<dp[n]<<endl;
return 0;
}