P1192 台阶问题(dp|递推式)

在这里插入图片描述
以前我一直不知道怎么写这道题,现在明白了;
其实可以这样考虑,比如:k=2如果我在第i个阶梯上面,那么我的上一个阶梯就只能是i-1,i-2这两个阶梯,所以方案总数就应该是F[i]=F[i-1]+F[i-2];F[i]这里代表到达i阶梯的方案总数;所以按照这个思路我们就可以推出这个一个公式:
F[i]=F[i-1]+F[i-2]+F[i-3]+…+F[i-k];
所以整合一下就应该是这种:
在这里插入图片描述
我这里i>=1的哈,因为F[0]=1,因为站在原地本身就是一种;
与其说这道题是dp,其实我感觉dp也就是去找递推式,只不过复杂的dp可就没那么容易了;
AC代码:

#include<bits/stdc++.h>
using namespace std;
#define Mod 100003
int F[100050];
int main(){
    
    
	int n , k;
	scanf("%d %d",&n,&k);
	F[0]=1;
	for(int i=1;i<=n;i++){
    
    
		 for(int j=1;j<=min(i,k);j++){
    
    
		 	F[i]=(F[i]+F[i-j])%Mod;
		 }
	}
	printf("%d\n",F[n]%Mod);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_44555205/article/details/104199880