题目传送门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 踩方格(搜索 动态规划 )的更多相关文章

  1. poj 4982 踩方格

    4982:踩方格 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 有一个方格矩阵,矩阵边界在无穷远处.我们做如下假设:a.    每走一步时,只能从当前方格移 ...

  2. 踩方格 OpenJ_Bailian - 4103

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

  3. 百练4103:踩方格(DFS)

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

  4. 递归 dfs 记忆化搜索 动态规划

    今天做洛谷P1434 [SHOI2002]滑雪 的时候仔细想了想记忆化搜索 现在总结一下 为了描述问题的某一状态,必须用到该状态的上一状态,而描述上一状态,又必须用到上一状态的上一状态……这种用自已来 ...

  5. noip 邮票面值设计 - 搜索 - 动态规划

    描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定M(N+M<=10)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大max ,使得1-max之间的每一个邮资值都能 ...

  6. DFS——>记忆化搜索——>动态规划

    以洛谷P1802  5倍经验日 为例 https://www.luogu.org/problem/show?pid=1802 题目背景 现在乐斗有活动了!每打一个人可以获得5倍经验!absi2011却 ...

  7. [BZOJ1032][P1840] 祖玛 记忆化搜索 动态规划

        描述 Description     某天,小x在玩一个经典小游戏——zumo.zumo游戏的规则是,给你一段长度为n的连续的彩色珠子,珠子的颜色不一定完全相同,但是,如果连续相同颜色的珠子大 ...

  8. P2258 子矩阵 (搜索,动态规划)

    题目链接 Solution 搜索+DP. 刚好把搜索卡死的数据范围... 然后应该可以很容易想到枚举行的情况,然后分列去DP. 行的情况直接全排列即可,复杂度最高 \(O(C_{16}^{8})\). ...

  9. skiing 暴力搜索 + 动态规划

    我的代码上去就是 直接纯粹的  暴力  .   居然没有超时   200ms  可能数据比较小   一会在优化 #include<stdio.h> #include<string.h ...

随机推荐

  1. windows 关闭端口被占用脚本

    cmd 关闭进程java taskkill /F /IM java.exe taskkill /f /im java.exe 如何用dat批处理文件关闭某端口对应程序-Windows自动化命令 如何用 ...

  2. 异常解决:java.lang.IllegalStateException: Failed to introspect Class

    java.lang.IllegalStateException: Failed to introspect Class 异常详情 原因 解决办法 异常详情 Exception encountered ...

  3. win7 debug 工具

    x86 处理器中的 CS 与 IP 寄存器介绍与调试: http://blog.sina.com.cn/s/blog_54f82cc2010121yj.html https://www.jianshu ...

  4. Codeforces Round #170 (Div. 1 + Div. 2)

    A. Circle Line 考虑环上的最短距离. B. New Problem \(n\) 个串建后缀自动机. 找的时候bfs一下即可. C. Learning Languages 并查集维护可以沟 ...

  5. 智课雅思短语---三、unshakable duty

    智课雅思短语---三.unshakable duty 一.总结 一句话总结:不可推卸的义务 unshakable duty 1.satisfy/ meet the needs of…? 满足需求 2. ...

  6. HDU 5971"Wrestling Match"(二分图染色)

    传送门 •题意 给出 n 个人,m 场比赛: 这 m 场比赛,每一场比赛中的对决的两人,一个属于 "good player" 另一个属于 "bad player" ...

  7. 同一个页面 andriod和ios设备上的按钮颜色不一致

    andriod系统显示蓝色的按钮,正常:ios设备显示灰色的按钮,不正常. style属性添加-webkit-appearance: none;

  8. H3C STP可选配置

  9. css页面去除滚动条

    注:滚动条是导致页面切换标签页闪动的原因 html{ /*隐藏滚动条,当IE下溢出,仍然可以滚动*/ -ms-overflow-style:none; /*火狐下隐藏滚动条*/ overflow:-m ...

  10. 原生js添加鼠标事件的兼容性写法

    兼容pc和移动端,还兼容了surface平板. surface平板特别坑,既可以用鼠标也能用触摸屏,也就是说同时有touch事件和mouse事件. function addEvent(_target, ...