台阶问题

台阶问题

分析
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数据慢很多,见下图

全部评论

相关推荐

03-06 18:20
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
4609次浏览 48人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
16917次浏览 137人参与
# 巨人网络春招 #
11559次浏览 230人参与
# 沪漂/北漂你觉得哪个更苦? #
1646次浏览 41人参与
# 你的实习产出是真实的还是包装的? #
3261次浏览 54人参与
# 春招至今,你的战绩如何? #
16231次浏览 147人参与
# MiniMax求职进展汇总 #
25294次浏览 322人参与
# HR最不可信的一句话是__ #
1118次浏览 33人参与
# AI面会问哪些问题? #
976次浏览 24人参与
# 你做过最难的笔试是哪家公司 #
1319次浏览 23人参与
# AI时代,哪个岗位还有“活路” #
2956次浏览 53人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152954次浏览 889人参与
# 简历第一个项目做什么 #
32209次浏览 364人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
8032次浏览 43人参与
# XX请雇我工作 #
51165次浏览 171人参与
# 简历中的项目经历要怎么写? #
311176次浏览 4273人参与
# 投格力的你,拿到offer了吗? #
178395次浏览 891人参与
# 你最满意的offer薪资是哪家公司? #
77017次浏览 375人参与
# AI时代,哪些岗位最容易被淘汰 #
64881次浏览 895人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187657次浏览 1123人参与
# 你怎么看待AI面试 #
180898次浏览 1320人参与
# 正在春招的你,也参与了去年秋招吗? #
364423次浏览 2642人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务