题意:

How many ways

Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2672 Accepted Submission(s): 1566

Problem Description
这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m)。游戏的规则描述如下:
1.机器人一开始在棋盘的起始点并有起始点所标有的能量。
2.机器人只能向右或者向下走,并且每走一步消耗一单位能量。
3.机器人不能在原地停留。
4.当机器人选择了一条可行路径后,当他走到这条路径的终点时,他将只有终点所标记的能量。

如上图,机器人一开始在(1,1)点,并拥有4单位能量,蓝色方块表示他所能到达的点,如果他在这次路径选择中选择的终点是(2,4)

点,当他到达(2,4)点时将拥有1单位的能量,并开始下一次路径选择,直到到达(6,6)点。
我们的问题是机器人有多少种方式从起点走到终点。这可能是一个很大的数,输出的结果对10000取模。

Input
第一行输入一个整数T,表示数据的组数。
对于每一组数据第一行输入两个整数n,m(1 <= n,m <= 100)。表示棋盘的大小。接下来输入n行,每行m个整数e(0 <= e < 20)。
Output
对于每一组数据输出方式总数对10000取模的结果.
Sample Input
1 6 6 4 5 6 6 4 3 2 2 3 1 7 2 1 1 4 6 2 7 5 8 4 3 9 5 7 6 6 2 1 5 3 1 1 3 7 2
Sample Output
3948

思路:
      直接记忆化搜索就行了,水题没啥好说的,还有就是提示一点,不是钱全花没了才可以停,中途也可以直接停下来去走另一条路,别的没啥,既然是记忆化搜索那么也应该可以用dp去写,因为如果不考虑实现的复杂度的话,我个人认为记忆化搜索本身就是dp,给出记忆化搜索的代码吧。

#include<stdio.h>
#include<string.h>

int mark[110][110];
int hash[110][110];
int map[110][110];
int n ,m;int abss(int x)
{return x > 0 ? x : -x;
}int DFS(int x ,int y)
{if(mark[x][y]) return hash[x][y];if(x == n && y == m) return 1;int sum = 0;for(int i = x ;i <= x + map[x][y] && i <= n;i ++)for(int j = y ;j <= y + map[x][y] && j <= m ;j ++){int dis = abss(i - x) + abss(j - y);if(dis > map[x][y] || dis == 0) continue;sum += (DFS(i ,j) % 10000);}mark[x][y] = 1;hash[x][y] = sum % 10000;return sum;
}int main ()
{int t ,i ,j;scanf("%d" ,&t);while(t--){scanf("%d %d" ,&n ,&m);for(i = 1 ;i <= n ;i ++)for(j = 1 ;j <= m ;j ++)scanf("%d" ,&map[i][j]);memset(mark ,0 ,sizeof(mark));printf("%d\n" ,DFS(1 ,1) % 10000);}return 0;
}


hdu1978 简单记忆化搜索相关推荐

  1. hdu2067 简单dp或者记忆化搜索

    题意: 小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  2. HDU1978 记忆化搜索

    How many ways Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  3. UVA437 巴比伦塔 The Tower of Babylon(矩形嵌套进阶版、DAG上DP、记忆化搜索)

    整理的算法模板合集: ACM模板 本题和基础的矩形覆盖差不多,只不过变成了三维的长方形. 因为每次转移的时候只有顶面的x和y会影响决策的进行,所以我们只需要用一个二元组(a,b)(a, b)(a,b) ...

  4. hdu 4722(记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722 思路:简单的记忆化搜索,留意一下A==0时的情况就可以了. 1 #include<iost ...

  5. Codeforces Round #336 (Div. 2) D. Zuma 记忆化搜索

    D. Zuma 题目连接: http://www.codeforces.com/contest/608/problem/D Description Genos recently installed t ...

  6. PAT甲级1079 Total Sales of Supply Chain:[C++题解] 树、结点到根结点的距离、树形dp、记忆化搜索

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:下图是对样例的模拟图示,题目就是统计叶子结点卖出去的钱数.根据下图,我们第一步是建树,第二步是统计叶子结点到根结点的距离,然后才能知道 ...

  7. 数据结构-记忆化搜索讲解

    算法:记忆化搜索算法 一:简述 记忆化搜索实际上是递归来实现的,但是递归的过程中有许多的结果是被反复计算的,这样会大大降低算法的执行效率. 而记忆化搜索是在递归的过程中,将已经计算出来的结果保存起来, ...

  8. P1464 Function(递归式的记忆化搜索)

    传送门 题目描述 对于一个递归函数w(a,b,c)w(a,b,c)w(a,b,c) 如果a≤0a≤0orb≤0b≤0orc≤0c≤0a \le 0a≤0 or b \le 0b≤0 or c \le ...

  9. hdu1501Zipper(记忆化搜索)

    http://acm.hdu.edu.cn/showproblem.php?pid=1501 搜了下记忆化搜索是嘛 然后就看到这个题了 不过一不小心看到代码了 代码又那么短 一不小心给记住了 然后看了 ...

最新文章

  1. k8s如何设置虚拟内存_绝地求生内存优化设置教程(建议收藏)
  2. P2P的原理和常见的实现方式
  3. 前端学习(2561):页面更新
  4. 读懂 Redis 源码,我总结了这7点心得
  5. 夯实数字化转型算能基石 构建洛阳银行核心云
  6. java根据field名获取变量_Java反射有多强?这5大神奇功能,你需要了解!
  7. c语言中输入大数,如何使用C语言实现输入10个数按从大到小的顺序排序输出
  8. 在 Mac 上如何放大或缩小?
  9. PPC小问题,持续更新中...
  10. 基于深度学习的恶意代码分类(一)
  11. 推荐系统常用推荐系统算法(协同过滤算法等)-人工智能AI
  12. 单片机/嵌入式体系介绍
  13. bootbox.js文档中文版
  14. 苹果支付验单java
  15. Word不能编辑文档怎么办,文档修改了不能保存怎么办
  16. c语言预处理命令math,C语言之预处理命令
  17. jquery(文本框添加符号)
  18. vcs+verdi版本 七夕小心心
  19. 如何将excel表格导入word_word办公技巧:如何让Excel与Word文档数据同步
  20. 对抗神经网络之对抗卷积神经网络[2]

热门文章

  1. stl里面stack的注意事项
  2. Java程序设计学习笔记(一)
  3. free查看可用缓存
  4. iOS - OC NSSize 尺寸
  5. POJ 1184 聪明的打字员
  6. servlet与jsp的联系与区别
  7. sicily 1150. 简单魔板
  8. 小猪学设计模式——工厂模式之抽象工厂
  9. MySQL—异常处理
  10. 计算一个二进制数中数字“1”的个数(位运算)