OpenJ_Bailian 4103 踩方格(搜索 动态规划 )
描述
有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:
a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;
b. 走过的格子立即塌陷无法再走第二次;
c. 只能向北、东、西三个方向走;
请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。
输入
允许在方格上行走的步数n(n <= 20)
输出
计算出的方案数量
样例输入
2
样例输出
7 解题思路:
1.递归:从 (i,j) 出发,走n步的方案数,等于以下三项之和:
从(i+1,j)出发,走n-1步的方案数。前提:(i+1,j)还没走过
从(i,j+1)出发,走n-1步的方案数。前提:(i,j+1)还没走过
从(i,j-1)出发,走n-1步的方案数。前提:(i,j-1)还没走过
逐层往下搜。
或者用状态转移:
要是最后一步是向左走,则前一步不能为向右走 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]
可得公式:f[i]=l[i]+r[i]+u[i]
=2*l[i-1]+2*r[i-1]+3*u[i-1]
=2*f[i-1]+u[i-1]
=2*f[i-1]+f[i-2]
#include<cstdio>
int vis[][]= {};
int ways(int x,int y,int n)
{
if (n==)
return ;
vis[x][y]=;
int num=;
if (!vis[x][y-]) num+=ways(x,y-,n-);
if (!vis[x][y+]) num+=ways(x,y+,n-);
if (!vis[x+][y]) num+=ways(x+,y,n-);
vis[x][y]=;
return num;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",ways(,,n));
return ;
}
递归搜索
#include<cstdio>
int l[],r[],u[];
int main()
{
int n;
scanf("%d",&n);
l[]=r[]=u[]=;
for (int i=; i<=n; i++)
{
l[i]=l[i-]+u[i-];
r[i]=r[i-]+u[i-];
u[i]=l[i-]+r[i-]+u[i-];
}
printf("%d\n",l[n]+u[n]+r[n]);
return ;
}
DP
#include<stdio.h>
int f[];
int main()
{
int n;
scanf("%d",&n);
f[]=,f[]=;
for (int i=; i<=n; i++)
f[i]=*f[i-]+f[i-];
printf("%d\n",f[n]);
return ;
}
公式
OpenJ_Bailian 4103 踩方格(搜索 动态规划 )的更多相关文章
- poj 4982 踩方格
4982:踩方格 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个方格矩阵,矩阵边界在无穷远处.我们做如下假设:a. 每走一步时,只能从当前方格移 ...
- 踩方格 OpenJ_Bailian - 4103
有一个方格矩阵,矩阵边界在无穷远处.我们做如下假设:a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上:b. 走过的格子立即塌陷无法再走第二次:c. 只能向北.东.西三个 ...
- 百练4103:踩方格(DFS)
描述 有一个方格矩阵,矩阵边界在无穷远处.我们做如下假设:a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上:b. 走过的格子立即塌陷无法再走第二次:c. 只能向北.东. ...
- 递归 dfs 记忆化搜索 动态规划
今天做洛谷P1434 [SHOI2002]滑雪 的时候仔细想了想记忆化搜索 现在总结一下 为了描述问题的某一状态,必须用到该状态的上一状态,而描述上一状态,又必须用到上一状态的上一状态……这种用自已来 ...
- noip 邮票面值设计 - 搜索 - 动态规划
描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定M(N+M<=10)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大max ,使得1-max之间的每一个邮资值都能 ...
- DFS——>记忆化搜索——>动态规划
以洛谷P1802 5倍经验日 为例 https://www.luogu.org/problem/show?pid=1802 题目背景 现在乐斗有活动了!每打一个人可以获得5倍经验!absi2011却 ...
- [BZOJ1032][P1840] 祖玛 记忆化搜索 动态规划
描述 Description 某天,小x在玩一个经典小游戏——zumo.zumo游戏的规则是,给你一段长度为n的连续的彩色珠子,珠子的颜色不一定完全相同,但是,如果连续相同颜色的珠子大 ...
- P2258 子矩阵 (搜索,动态规划)
题目链接 Solution 搜索+DP. 刚好把搜索卡死的数据范围... 然后应该可以很容易想到枚举行的情况,然后分列去DP. 行的情况直接全排列即可,复杂度最高 \(O(C_{16}^{8})\). ...
- skiing 暴力搜索 + 动态规划
我的代码上去就是 直接纯粹的 暴力 . 居然没有超时 200ms 可能数据比较小 一会在优化 #include<stdio.h> #include<string.h ...
随机推荐
- 2018-2-13-win10-uwp-如何让-Page-继承泛型类
title author date CreateTime categories win10 uwp 如何让 Page 继承泛型类 lindexi 2018-2-13 17:23:3 +0800 201 ...
- 史上最全的MYSQL备份方法
本人曾经 用过的备份方式有:mysqldump.mysqlhotcopy.BACKUP TABLE .SELECT INTOOUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文 ...
- 【CSS3动画】下拉菜单模拟
下拉菜单模拟效果图: CSS3: <style> #box{width:200px; height:50px; overflow:hidden; cursor: pointer; tran ...
- H3C 帧中继子接口
- hdu 4394 Digital Square(bfs)
Digital Square Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- H3C Easy IP配置举例
- SpringSecurity认证流程详解
SpringSecurity基本原理 在之前的文章<SpringBoot + Spring Security 基本使用及个性化登录配置>中对SpringSecurity进行了简单的使用介绍 ...
- java 文件过滤器 java.io.FilenameFilter
File 类里有方法: String[] list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录. File ...
- linux自旋锁函数
我们已经看到 2 个函数, spin_lock 和 spin_unlock, 可以操作自旋锁. 有其他几个函 数, 然而, 有类似的名子和用途. 我们现在会展示全套. 这个讨论将带我们到一个我们无 法 ...
- linux 处理器特定的寄存器
如果你需要测量非常短时间间隔, 或者你需要非常高精度, 你可以借助平台依赖的资源, 一个要精度不要移植性的选择. 在现代处理器中, 对于经验性能数字的迫切需求被大部分 CPU 设计中内在的指令定时不 ...