题目:

这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(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

分析:

要求到达(n,m)点有多少种方式,且有限制,第一个我会相到直接dfs,但是会发现复杂度过高,肯定会超时,所以记忆化搜索降低复杂度,表示每次到达某点存在多少种情况(通过迭代达成)。

AC代码

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int M=1e3+10;
int m,n,a[M][M],dp[M][M];
int dfs(int x,int y)
{if(dp[x][y]!=-1)return dp[x][y];dp[x][y]=0;int ans=0;for(int i=0; i<=a[x][y]; i++)for(int j=0; j<=a[x][y]-i; j++){int u=x+i;int v=y+j;if(u<=0||v<=0||u>m||v>n)continue;ans=(ans+dfs(u,v))%10000;}dp[x][y]=ans;return ans;
}
int main()
{int t;scanf("%d",&t);while(t--){memset(dp,-1,sizeof(dp));scanf("%d%d",&m,&n);for(int i=1; i<=m; i++)for(int j=1; j<=n; j++)scanf("%d",&a[i][j]);dp[m][n]=1;printf("%d\n",dfs(1,1));}return 0;
}

How many ways HDU - 1978(记忆化搜索关于求多少种方式模板)相关推荐

  1. hdu 4722(记忆化搜索)

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

  2. hdu 1142 记忆化搜索

    题目是这样的,貌似一开始我这个英语搓的人还理解错了...orz http://acm.hdu.edu.cn/showproblem.php?pid=1142 就是最短路,只不过用dijkstra是从终 ...

  3. hdu 1514 记忆化搜索

    题意是给4堆(堆的高度小于等于40)有颜色(颜色的种类小于等于20)的物品,你有一个篮子最多能装5件物品,每次从这4堆物品里面 任取一件物品放进篮子里,但是取每堆物品时,必须先取上面的物品,才能取下面 ...

  4. hdu 1078 记忆化搜索

    题意:给出n*n的格子,每个各自里面有些食物,问一只老鼠每次走最多k步所能吃到的最多的食物 虽然是做过的老题了,但是1A的感觉好爽,对搜索认识更深了 1 #include<cstdio> ...

  5. PAT甲级1090 Highest Price in Supply Chain:[C++题解]树、结点到根结点的距离、记忆化搜索、树形dp

    文章目录 题目分析 题目链接 题目分析 来源:acwing 和PAT甲级1079 Total Sales of Supply Chain:[C++题解] 树.结点到根结点的距离.树形dp.记忆化搜索是 ...

  6. 记忆化搜索 Memorization Search

    记忆化搜索 Memorization Search 什么是记忆化搜索 记忆化搜索函数的三个特点 记忆化搜索 vs 动态规划 三种适用于DP的场景 三种不适用于DP的场景 Examples: Leetc ...

  7. HDU1937How many ways(记忆化搜索)入门

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  8. hdu 4597 Play Game(记忆化搜索)

    题目链接:hdu 4597 Play Game 题目大意:给出两堆牌,仅仅能从最上和最下取,然后两个人轮流取,都依照自己最优的策略.问说第一个人对多的分值. 解题思路:记忆化搜索,状态出来就很水,dp ...

  9. HDU 1176 免费馅饼(记忆化搜索)

    免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

最新文章

  1. 都是套路:盘点 Java 面试中链表的几大解题模板方法!
  2. 1.Maven+SpringMVC+Eclipse软件安装配置,Maven报插件错误,Eclipse总是卡死的解决办法,导入一个maven工程后 一直显示importing maven project
  3. python2.7输出语句_python2.7入门---模块(Module)
  4. mybatis plus 使用函数_mybatis-plus的使用 ------ 入门
  5. Scala的Tuple元素个数的限制问题
  6. python笔记:#010#运算符
  7. 8选1的多路选择器c语言代码,8选1多路选择器电路图(五款8选1多路选择器电路)
  8. 30余种加密编码类型的密文特征分析(建议收藏)
  9. 超频到3200最佳时序_攒啥电脑呢?笔记本内存也要超频?
  10. aamp;m大学计算机科学,斑马博士捷报|德克萨斯AM大学 (TAMU) MSc Computer Science录取!...
  11. 彼得林奇的成功投资---学习之一
  12. [4G5G专题-83]:架构 - 移动通信网2G/3G/4G/5G/6G网络架构的演进历程
  13. thinkpad10平板电脑装linux,ThinkPad X61上经历Ubuntu 8.10(安装笔记)
  14. 【百度网盘】 个人资源共享
  15. 【QT 5 设置自定义标题栏+学习:《QT实现鼠标拖动调整窗口大小》+基础样例】
  16. 关于云开发数据库的使用经验和建议
  17. 【天坑】BLAST比对序列时遭受的痛苦
  18. 联想Phab2 Pro Tango手机测评
  19. 电脑投屏到电视怎么操作_无线投屏器应用
  20. tushare实战LSTM实现黄金价格预测

热门文章

  1. Android之添加固定图标到桌面
  2. linux之使用md5sum命令比较两个文件是否一样
  3. C++编译代码的时候提示‘getInstance’ is not a member of ‘A’ A a = A::getInstance();解决办法
  4. mybatis和hibernate的对比总结
  5. python subprocess popen 无法打开_使用subprocess.Popen()在python脚本中设置PYTHONPATH失败...
  6. python opencv 图像切割_【OpenCV+Python】图像的基本操作与算术运算
  7. python开源考试_Github 上 10 个值得学习的 Springboot 开源项目
  8. 电脑用户名_仁霸下料优化软件如何找回密码、更换绑定电脑?
  9. 与毒”共舞30年!清华美女研究生为何放弃高薪,选择特招入伍?背后的原因令人泪崩......
  10. 盘点数学里十大不需语言的证明