台阶问题

台阶问题

分析
D f s n 1 e 5 O 2 n 第一眼看到这题的时候就直接想用Dfs模拟走路的过程,可是发现n数据范围为1e5,就计算一下复杂度。接近O(2^n) Dfsn1e5O2n
t l e d f s T l e d f s 无非就是tle。但是为了练习我的dfs模板,于是我就手打一遍Tle的dfs,代码如下 tledfsTledfs

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
ll cnt=0,n,k,p=100003;
void dfs(ll num){
	if(num==n) {cnt++;cnt=cnt%p;return ;}
	if(num>n) return ;
	for(int i=1;i<=k;i++){
		dfs(num+i);
	}
	return;
}
int main(){
    scanf("%lld%lld",&n,&k);
    dfs(0);
    cout<<cnt<<endl;
    return 0;
}
///dfs的复杂度是2^n tle

d f s d p d p 接下来,我就想用什么来优化dfs呢?dp突然出现在我的脑海里面,分析一波dp可用性,发现符合最小子问题 dfsdpdp
j , i d p [ d i s ] d i s 于是,我就假设初始位置为j,目标位置为i,那么dp[dis]表示走到dis的时候所用的所有可能方式。我们接下来考虑 j,idp[dis]dis
j i 怎样从j转移到i位置呢? ji
j i j = i k , i ( k 1 ) , i ( k 2 ) , . . . . . . , i 1 d p [ i ] 从j位置走到i位置,分j=i-k,i-(k-1),i-(k-2),......,i-1这些位置走一步到达,那么我们就可以利用循环来更新dp[i] jij=ik,i(k1),i(k2),......,i1dp[i]

for(int i=1;i<=n;i++){
    for(int j=1;j<=k;j++){/判断条件需要修改,这里只是为了说明怎么走
        dp[i]=dp[i]+dp[i-j];
    }
}

i k 细心的你可以发现当i小与等于k的时候会出现错误。没错,就是这样,这里我们就可以在上面的判断条件中改一下 ik
j &lt; = k 把j&lt;=k j<=k改成j<=k&&i-j>=0

AC

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
int n,k,p=100003,dp[maxn];
int main(){
    scanf("%d%d",&n,&k);
    dp[0]=dp[1]=1;
    for(int i=2;i<=n;i++){
    for(int j=1;j<=k&&i-j>=0;j++){
        dp[i]=(dp[i]+dp[i-j])%p;
    }
    }
    cout<<dp[n]<<endl;
    return 0;
}


备注,ll数据处理比int数据慢很多,见下图

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
3288次浏览 43人参与
# HR最不可信的一句话是__ #
1035次浏览 32人参与
# 米连集团26产品管培生项目 #
7134次浏览 224人参与
# 春招至今,你的战绩如何? #
15022次浏览 140人参与
# AI面会问哪些问题? #
905次浏览 22人参与
# 你的实习产出是真实的还是包装的? #
2763次浏览 52人参与
# 巨人网络春招 #
11490次浏览 224人参与
# 沪漂/北漂你觉得哪个更苦? #
1322次浏览 40人参与
# 你做过最难的笔试是哪家公司 #
1152次浏览 20人参与
# AI时代,哪个岗位还有“活路” #
2715次浏览 50人参与
# XX请雇我工作 #
51149次浏览 171人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7971次浏览 43人参与
# 简历第一个项目做什么 #
32089次浏览 359人参与
# 简历中的项目经历要怎么写? #
310939次浏览 4260人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152851次浏览 889人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187561次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64564次浏览 866人参与
# 如果重来一次你还会读研吗 #
229978次浏览 2011人参与
# 投格力的你,拿到offer了吗? #
178279次浏览 891人参与
# 你怎么看待AI面试 #
180682次浏览 1298人参与
# 正在春招的你,也参与了去年秋招吗? #
364223次浏览 2641人参与
# 腾讯音乐求职进展汇总 #
160826次浏览 1114人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务