信息学奥赛一本通 1196:踩方格 | OpenJudge NOI 2.6 4982:踩方格
【题目链接】
ybt 1196:踩方格
OpenJudge NOI 2.6 4982:踩方格
【题目考点】
1. 递推
【解题思路】
递推状态
这里用左,右,上 代替 东,西,北。
lil_ili为第i步向左走的走法数量
rir_iri为第i步向右走的走法数量
uiu_iui为第i步向上走的走法数量
fif_ifi为第i步的总走法数量,有fi=li+ri+uif_i=l_i+r_i+u_ifi=li+ri+ui初始状态
第0步走法:第0步不走,也算1种走法:f0=1f_0=1f0=1
第1步走法:l1=r1=u1=1l_1=r_1=u_1=1l1=r1=u1=1, f1=3f_1=3f1=3递推关系
当前是第i步,考虑第i-1步的走法如何影响第i步的走法。
- 只有第i-1步是向左或上走时,第i步才能向左走。(因为如果之前是向右走的,现在此处左边是一个已经走过的坍塌的格子。)
因而现在第i步向左走的走法数量是第i-1步向左和向上走法数量的加和。有:li=li−1+ui−1l_i=l_{i-1}+u_{i-1}li=li−1+ui−1 - 只有第i-1步是向右或向上走时,第i步才能向右走。有:ri=ri−1+ui−1r_i=r_{i-1}+u_{i-1}ri=ri−1+ui−1
- 无论之前怎么走,第i步都能向上走。有:ui=li−1+ri−1+ui−1u_i=l_{i-1}+r_{i-1}+u_{i-1}ui=li−1+ri−1+ui−1
第i步的总走法为第i-1步向上,向左,向右走法的加和
fi=li+ri+ui=li−1+ui−1+ri−1+ui−1+li−1+ri−1+ui−1=2(li−1+ui−1+ri−1)+ui−1f_i=l_i+r_i+u_i=l_{i-1}+u_{i-1}+r_{i-1}+u_{i-1}+l_{i-1}+r_{i-1}+u_{i-1}=2(l_{i-1}+u_{i-1}+r_{i-1})+u_{i-1}fi=li+ri+ui=li−1+ui−1+ri−1+ui−1+li−1+ri−1+ui−1=2(li−1+ui−1+ri−1)+ui−1
已知:fi−1=li−1+ui−1+ri−1f_{i-1} = l_{i-1}+u_{i-1}+r_{i-1}fi−1=li−1+ui−1+ri−1且ui−1=li−2+ri−2+ui−2=fi−2u_{i-1}=l_{i-2}+r_{i-2}+u_{i-2}=f_{i-2}ui−1=li−2+ri−2+ui−2=fi−2
所以:fi=2fi−1+fi−2f_i=2f_{i-1}+f_{i-2}fi=2fi−1+fi−2
【题解代码】
解法1:以第i步总走法数量为状态
#include <bits/stdc++.h>
using namespace std;
int main()
{int n, f[25];cin >> n;f[0] = 1, f[1] = 3;for(int i = 2; i <= n; ++i)f[i] = 2*f[i-1] + f[i-2];cout << f[n];return 0;
}
解法2:以第i步向左、右、上方向走法数量为状态
#include <bits/stdc++.h>
using namespace std;
#define N 25
int main()
{int n, l[N], r[N], u[N];l[1] = r[1] = u[1] = 1;cin >> n;for(int i = 2; i <= n; ++i){l[i] = l[i-1] + u[i-1];r[i] = r[i-1] + u[i-1];u[i] = l[i-1] + r[i-1] + u[i-1];}cout << l[n] + r[n] + u[n];return 0;
}
信息学奥赛一本通 1196:踩方格 | OpenJudge NOI 2.6 4982:踩方格相关推荐
- 信息学奥赛一本通 1190:上台阶 | OpenJudge NOI 2.3 3525:上台阶
[题目链接] ybt 1190:上台阶 OpenJudge NOI 2.3 3525:上台阶 注:ybt 1190最大数据数量为71,而OpenJudge 2.3 3525中最大数据数量为100.如果 ...
- 信息学奥赛一本通 1225:金银岛 | OpenJudge NOI 4.6 1797:金银岛
[题目链接] ybt 1225:金银岛 OpenJudge NOI 4.6 1797:金银岛 [题目考点] 1. 贪心 2. 部分背包问题 [解题思路] 该题为部分背包问题 1. 贪心选择性质的证明: ...
- 信息学奥赛一本通 1226:装箱问题 | OpenJudge NOI 4.6 19:装箱问题
[题目链接] ybt 1226:装箱问题 OpenJudge NOI 4.6 19:装箱问题 [题目考点] 1. 贪心 [解题思路] 该题说是三维立方体,实际上无论是包裹还是产品,高度都是h,因而不用 ...
- 信息学奥赛一本通 1216:红与黑 / OpenJudge NOI 2.5 1818
[题目链接] ybt 1216:红与黑 OpenJudge NOI 2.5 1818:红与黑 [题目考点] 1. 连通块问题 2. 深搜/广搜 [解题思路] 1. 深搜 从第一个格子出发,遍历所有可以 ...
- 信息学奥赛一本通 1115:直方图 | OpenJudge NOI 1.9 09
[题目链接] ybt 1115:直方图 OpenJudge NOI 1.9 09:直方图 [题目考点] 1. 散列存储 也叫哈希存储.其思想为:将要存储的值通过某种算法映射到存储地址,映射算法为散列函 ...
- 信息学奥赛一本通 1114:白细胞计数 | OpenJudge NOI 1.9 08
[题目链接] ybt 1114:白细胞计数 OpenJudge NOI 1.9 08:白细胞计数 [题目考点] 1. 求数组中最大值及其下标 方法1:保存最大值和下标 设置临时最大值变量mx,mx的初 ...
- 信息学奥赛一本通 1109:开关灯 | OpenJudge NOI 1.5 31:开关灯
[题目链接] ybt 1109:开关灯 OpenJudge NOI 1.5 31:开关灯 [题目考点] 1. 模拟 2. 循环.数组 3. 用逗号分隔输出 设标志位:isFirst,表示现在输出的是否 ...
- 信息学奥赛一本通 1073:救援 | OpenJudge NOI 1.5 19:救援
[题目链接] ybt 1073:救援 OpenJudge NOI 1.5 19:救援 [题目考点] 1. 直角坐标系下某点到原点的距离 点(x,y)(x,y)(x,y)到原点的距离d=x2+y2d = ...
- 信息学奥赛一本通 1070:人口增长 | OpenJudge NOI 1.5 14:人口增长问题
[题目链接] ybt 1070:人口增长 OpenJudge NOI 1.5 14:人口增长问题 [题目考点] 1. 循环求幂 设变量r初始值为1:int r = 1; 循环n次每次循环中输入变量a, ...
- 信息学奥赛一本通 1060:均值 | OpenJudge NOI 1.5 03
[题目链接] ybt 1060:均值 OpenJudge NOI 1.5 03:均值 [题目考点] 1. while循环 2. for循环 循环n次的两种写法 for(int i = 0; i < ...
最新文章
- 环境微生物期刊—Bioresource Technology
- StringBuffer 和 StringBuilder 的 3 个区别!
- Enums and Structs in C#(C#里的枚举和结构) (from codeproject)
- 这焊接技术,大开眼界了......
- ik分词和jieba分词哪个好_Pubseg:一种单双字串的BiLSTM中文分词工具
- msflexgrid允许大选择_特大型矿井提升机结构和布置方式的选择
- python数组追加_python向数组追加数据库
- C++ HOOK 详解
- Linux C/C++ —— intent 工具,time 命令
- 自动基线校正 python_安全运维中基线检查的自动化之ansible工具巧用
- python编程从入门到实战的16堂课_好评如潮,百万Python程序员的「案头必备书」,终于出配套习题解答了!...
- P3388 【模板】割点(割顶)
- POP3 SMTP 协议分析学习笔记
- 三国演义人物出场次数
- 云计算时代商业银行的战略机会
- coursera—Mini-project #1 - Rock-paper-scissor-lizard-Spock
- matlab绘制空间摆线轨迹
- 2013年多益网络校园招聘笔试题
- java equest 作用_JSP四大作用域及请求范围总结
- 计算机基础知识学习第一课,第一课计算机基础知识~.ppt