洛谷 P1192:台阶问题 ← 动态规划 + 前缀和优化

【题目来源】
https://www.luogu.com.cn/problem/P1192

【题目描述】
有 N 级台阶,你一开始在底部,每次可以向上迈 1∼K 级台阶,问到达第 N 级台阶有多少种不同方式。

【输入格式】
两个正整数 N,K。

【输出格式】
一个正整数 ans(mod 100003),为到达第 N 级台阶的不同方式数。

【输入样例】
5 2

【输出样例】
8

【数据范围】
对于 20% 的数据,1≤N≤10,1≤K≤3;
对于 40% 的数据,1≤N≤1000;
对于 100% 的数据,1≤N≤10^5,1≤K≤100。

【算法分析】
● f[i] 表示从底部到第 i 级台阶的方案数。
● 一维前缀和与差分:https://blog.csdn.net/hnjzsyjyj/article/details/145627134
● 二维前缀和与差分:https://blog.csdn.net/hnjzsyjyj/article/details/145671816

【算法代码】

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

const int MOD=1e5+3;
const int N=1e5+5;
int f[N],s[N];

int main() {
    int n,k;
    cin>>n>>k;
    f[0]=1,s[0]=1;
    for(int i=1; i<=n; i++) {
        if(i<=k) f[i]=s[i-1]%MOD;
        else {
            f[i]=(s[i-1]-s[i-k-1]+MOD)%MOD;
        }
        s[i]=(s[i-1]+f[i])%MOD;
    }
    cout<<f[n]<<endl;

    return 0;
}

/*
in:5 2
out:8
*/

【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/145671816
https://blog.csdn.net/hnjzsyjyj/article/details/145627134
https://blog.csdn.net/hnjzsyjyj/article/details/142732833
https://blog.csdn.net/hnjzsyjyj/article/details/147405964
https://blog.csdn.net/hnjzsyjyj/article/details/145290457
https://blog.csdn.net/hnjzsyjyj/article/details/112797538
https://blog.csdn.net/hnjzsyjyj/article/details/100418268

相关推荐
故事和你916 小时前
洛谷-数据结构1-1-线性表1
开发语言·数据结构·c++·算法·leetcode·动态规划·图论
Struggle_975512 小时前
算法知识-从递归入手三维动态规划
算法·动态规划
阿Y加油吧13 小时前
两道中等 DP 题拆解:打家劫舍 & 完全平方数
算法·leetcode·动态规划
君义_noip14 小时前
信息学奥赛一本通 4131:【GESP2506六级】学习小组 | 洛谷 P13015 [GESP202506 六级] 学习小组
算法·动态规划·gesp·信息学奥赛
6Hzlia15 小时前
【Hot 100 刷题计划】 LeetCode 300. 最长递增子序列 | C++ 动态规划 & 贪心二分
c++·leetcode·动态规划
6Hzlia19 小时前
【Hot 100 刷题计划】 LeetCode 152. 乘积最大子数组 | C++ 动态规划 (绝妙 swap 翻转技巧)
c++·leetcode·动态规划
阿Y加油吧20 小时前
从斐波那契到动态规划:两道入门题吃透 DP 核心思想
算法·动态规划·代理模式
伟大的车尔尼2 天前
搜索题目:01 矩阵
动态规划·广度优先搜索
故事和你912 天前
洛谷-算法1-7-搜索2
数据结构·c++·算法·leetcode·深度优先·动态规划·图论
君义_noip3 天前
信息学奥赛一本通 4164:【GESP2512七级】学习小组 | 洛谷 P14922 [GESP202512 七级] 学习小组
学习·算法·动态规划·gesp·信息学奥赛