问题描述:

【题目描述】
有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:

a、每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;

b、走过的格子立即塌陷无法再走第二次;

c、只能向北、东、西三个方向走;

请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。

【输入】
允许在方格上行走的步数n(n≤20)。

【输出】
计算出的方案数量。

【输入样例】
2
【输出样例】
7

问题分析:

此题不能直接递推第n步,直接来自于左、右、上;因为如果向右走后,下一步就不能往左走了,所以这题和 【例3.6】过河卒(Noip2002) 、1194:移动路线 这两个题不太一样;

解法一

可以分解细化该问题,通过三个数组,分别记录,左右和向前的方法数,分析如下:
下一步向上走的递推式up[i]=up[i-1]+left[i-1]+right[i-1];(上一步无论向左、向右、向上 下一步都可以向上走)
下一步向左走的递推式left[i]=left[i-1]+up[i-1];(上一步向左向上 下一步都可以向上走,但是上一步向右走,就不能再向左走了,因为不能走再走过的格子)
下一步向右走的递推式right[i]=right[i-1]+up[i-1];(同理,上一步不能是向左走的)
最后输出**up[n]+right[n]+left[n]**即可;

解法二

步数   1   2   3   4
方法数   3   7  17  41
本题可以通过找规律来得到递推式:f[i]=2 * f[i-1] + up[i-1] = 2f[i-1]+f[i-2];(也可以通过上面的解法推出来)
f[i]=up[i]+right[i]+left[i]=up[i-1]+left[i-1]+right[i-1]+left[i-1]+up[i-1]+right[i-1]+up[i-1]
化简可得:
f[i]=2
(up[i-1] + left[i-1] + right[i-1])+ up[i-1] =2 * f[i-1] + up[i-1];
有up[i]=up[i-1]+left[i-1]+right[i-1]可以推出up[i-1]=up[i-2]+left[i-2]+right[i-2];
且f[i-2]=up[i-2]+left[i-2]+right[i-2];
f[i]=2 * f[i-1] + up[i-1] = 2*f[i-1]+f[i-2];

解决方案:

根据规律 结论

#include <bits/stdc++.h>
using namespace std;
long long f[30];
int main() {int n;cin>>n;f[1]=3; f[2]=7;for(int i=3;i<=n;i++){f[i]=2*f[i-1]+f[i-2];} cout<<f[n];
}

分解方向解法

#include <bits/stdc++.h>
using namespace std;
long long up[30],_left[30],_right[30];
int main() {int n;cin>>n;//初始化 up[1]=1;_left[1]=1;_right[1]=1;for(int i=2;i<=n;i++){up[i]=up[i-1]+_left[i-1]+_right[i-1];_left[i]=_left[i-1]+up[i-1];_right[i]=_right[i-1]+up[i-1];}cout<<up[n]+_left[n]+_right[n];
}

1196:踩方格(递推)相关推荐

  1. hdu 2046 骨牌铺方格 递推求解

    骨牌铺方格 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  2. HDU 2046 骨牌铺方格 递推

    骨牌铺方格 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  3. 信息奥赛一本通的递推练习

    信息奥赛一本通的递推练习 递推与动态规划 1313:位数问题 1314:过河卒 1194:移动路线 1196:踩方格 递推与动态规划 递推解决的问题中满足最优化原理的也是属于动态规划范畴 1313:位 ...

  4. HDOJ 2046 骨牌铺方格 【递推】

    HDOJ 2046 骨牌铺方格 [递推] 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2046 铺2*1只有一种情况(一竖) 2*2有两种情况(两横或 ...

  5. 信息学奥赛一本通(1196:踩方格)

    1196:踩方格 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 8958     通过数: 5926 [题目描述] 有一个方格矩阵,矩阵边界在无穷远处.我们做如下 ...

  6. HDU2046 骨牌铺方格【递推】

    骨牌铺方格 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  7. 信息学奥赛一本通:1196:踩方格

    1196:踩方格 [题目描述] 有一个方格矩阵,矩阵边界在无穷远处.我们做如下假设: a.每走一步时,只能从当前方格移动一格,走到某个相邻的方格上: b.走过的格子立即塌陷无法再走第二次: c.只能向 ...

  8. 基础算法 —— 递推算法

    [概述] 递推算法:通过已知条件,利用相邻的数据项间的关系(即:递推关系),得出中间推论,直至得到结果的算法. 递推关系:给定一个数的序列H0,H1,-,Hn,若存在整数N0,使当n>N0时,可 ...

  9. Bailian4130 踩方格【组合+打表】

    4103:踩方格 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个方格矩阵,矩阵边界在无穷远处.我们做如下假设: a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上: ...

  10. C++奥赛一本通递推题解

    title: C++奥赛一本通刷题记录(递推) date: 2017-11-08 tags: 一本通 openjudege categories: OI C++奥赛一本通刷题记录(递推) 2017.1 ...

最新文章

  1. WHAT THE DATA SAYS ABOUT KUBERNETES DEPLOYMENT PATTERNS
  2. 帮我看看这个是什么意思 c++代码
  3. SAP CAP 编程模型简介
  4. 两款开源Web功能测试工具
  5. 巴西教育科技公司Arco Educacao上市 融资1.95亿美元
  6. 红黑树 平衡二叉搜索树_红黑树:自我平衡的二叉搜索树,并举例说明
  7. 火速拿来用!对比 12,000 个 Vue.js 开源项目发现最实用的 TOP45!
  8. LICEcap 录制Gif动画
  9. [WARNING]考前必读?!
  10. [NOIP2013] 华容道
  11. mac charles4.0.2免费破解版安装
  12. 常用字体对照表和常用命名
  13. html仿ppt动画,jquery仿PPT幻灯片特效插件ppt.js
  14. ppt背景图片怎么更换应用到全部
  15. WPF学习之绘图和动画
  16. 利用Excel制作问卷的饼状图
  17. 输入正整数n,输出n层数字金字塔。
  18. HBuilderX 终端显示空白问题
  19. python程序员教你用微信给对方定位!你说回家!却还在外面鬼混?
  20. 手把手教你如何制作和使用lib和dll

热门文章

  1. 有赞订单导出的配置化实践
  2. 论文笔记:Integrated Object Detection and Tracking with Tracklet-Conditioned Detection
  3. Go:http request cancelled 服务端感知
  4. 当前服务器更新维护公告,【已开服】1月17日全部服务器更新维护公告
  5. 上传身份证照片js_小程序上传身份证图片的实现方法
  6. 【毕业设计】大数据 电影数据分析与可视化系统 - python Django 大数据 可视化
  7. Python语言程序设计基础_序列型数据和控制结构综合练习(第七周)_答案_通识教育必修课程_上海师范大学
  8. 高数篇:06零点问题与微分不等式
  9. CSDN如何上传照片
  10. Python实例——国际标准书号(ISBN)的计算