(递归)P1192 台阶问题】的更多相关文章

P1192 台阶问题 题目描述 有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式. 输入输出格式 输入格式: 输入文件的仅包含两个正整数N,K. 输出格式: 输入文件stair.out仅包括1个正整数,为不同方式数,由于答案可能很大,你需要输出mod 100003后的结果. 输入输出样例 输入样例#1: 复制 5 2 输出样例#1: 复制 8 说明 对于20%的数据,有N ≤ 10, K ≤ 3; 对于40%的数据,有N ≤ 1000; 对于…
有NN级的台阶,你一开始在底部,每次可以向上迈最多KK级台阶(最少11级),问到达第NN级台阶有多少种不同方式. 输入输出格式 输入格式: 两个正整数N,K. 输出格式: 一个正整数,为不同方式数,由于答案可能很大,你需要输出ans \bmod 100003ansmod100003后的结果. 输入输出样例 输入样例#1: 复制 5 2 输出样例#1: 复制 8 说明 对于20\%20%的数据,有N ≤ 10, K ≤ 3N≤10,K≤3; 对于40\%40%的数据,有N ≤ 1000N≤1000…
题解: 这其实是变相的斐波那契,观察下列等式: //k=2 : 1 2 3 5 8 13 21 34...... //k=3 : 1 2 4 7 13 24 44 81... //k=4 : 1 2 4 8 15 29 56 108... //k=5 : 1 2 4 8 16 31 61 120... 我们不难发现当n<=k时第N项=(上一项*2)%100003,当n>k时第N项=(上一项*2-第n-1-k项)%100003; 所以递推式就是f(x)=x<=n?f(x-1)*2:f(x-…
题目:https://www.luogu.org/problemnew/show/P1192 题意: 给定n和k,一个人一次可以迈1~k步,问走n步有多少种方案. 思路: 本来傻乎乎上来就递归,显然会T的啊猪头! 然后改成记忆化搜索.dfs的参数就是还剩余的步数,num数组存的就是走i步的方案数. #include<stdio.h> #include<stdlib.h> #include<map> #include<set> #include<iost…
题目描述 有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式. 输入输出格式 输入格式: 输入文件的仅包含两个正整数N,K. 输出格式: 输入文件stair.out仅包括1个正整数,为不同方式数,由于答案可能很大,你需要输出mod 100003后的结果. 输入输出样例 输入样例#1: 5 2 输出样例#1: 8 说明 对于20%的数据,有N ≤ 10, K ≤ 3; 对于40%的数据,有N ≤ 1000; 对于100%的数据,有N ≤ 1000…
递推问题,要用到递推式: 设f(n)为n个台阶的走法总数,把n个台阶的走法分成k类:第1类:第1步走1阶,剩下还有n-1阶要走,有f(n-1)种方法: 第2类:第1步走2阶,剩下还有n-2阶要走,有f(n-2)种方法: 第3类:第1步走3阶,剩下还有n-3阶要走,有f(n-3)种方法: ..........                    ........... 第k类:第1步走k阶,剩下还有n-k阶要走,有f(n-k)种方法: 根据加法原理:f(n)=f(n-1)+f(n-2)+....…
https://www.luogu.org/problem/show?pid=1192 登楼梯 肯定能想到  dp[i] = dp[i-1] + dp[i-2] + ...+ dp[i-k] 然后想到 两级台阶需要  dp[1] dp[2] 所以 三级台阶 需要 dp[1] dp[2] dp[3] 然后自己模拟了一下  大概 dp[i] = 2^(i-1) 所以 直接for 套 for 出来 #include<bits/stdc++.h> using namespace std; ; ; in…
题目描述 有NN级的台阶,你一开始在底部,每次可以向上迈最多KK级台阶(最少11级),问到达第NN级台阶有多少种不同方式. 输入格式 两个正整数N,K. 输出格式 一个正整数,为不同方式数,由于答案可能很大,你需要输出ans \bmod 100003ansmod100003后的结果. 输入输出样例 输入 5 2 输出 8 说明/提示 对于20\%20%的数据,有N ≤ 10, K ≤ 3N≤10,K≤3; 对于40\%40%的数据,有N ≤ 1000N≤1000; 对于100\%100%的数据,…
题目描述 有NNN级的台阶,你一开始在底部,每次可以向上迈最多KKK级台阶(最少111级),问到达第NNN级台阶有多少种不同方式. 输入格式 两个正整数N,K. 输出格式 一个正整数,为不同方式数,由于答案可能很大,你需要输出ans mod 100003ans \bmod 100003ansmod100003后的结果. #include <bits/stdc++.h> using namespace std; ]={};//dp数组 int N,K; void calc(int cnt) {…
一.概述 递归:指在当前方法内调用自己的现象. 递归的分类: 递归分为两种,直接递归和简介递归 直接递归称为方法自身调用自己 间接递归可以 A 方法调用 B 方法,B 方法调用 C 方法,C 方法调用 A 方法. 注意: 递归一定要有条件限制,保证递归能够停止下来,否则会发生栈内存溢出. 在递归中虽然有限定条件,但是递归次数不能太多,苟泽也会发生栈内容溢出. 构造方法,进制递归. 递归导致栈内存溢出的原理: 二.案例 1.递归累加求和 计算 1~ n 的和,n 的累加 = n + (n+1) 的…