台阶问题(递归)

题目名字 台阶问题

题目链接

题意

求可以走多少个台阶

思路

  1. dp[i]表示将i个物品分成k个组合的方案数。在每次循环中,我们枚举j从1到k,如果i>=j,则将dp[i-j]加到dp[i]上。最终输出dp[n]即可得到将n个物品分成k个组合的方案数。需要注意的是,由于方案数可能非常大,因此需要对M取模。

算法一:递归

代码
    #include
	#include
	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;
	}
 

你可能感兴趣的:(算法)