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;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值