题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1078

题目大意:

题目中的k表示横向或者竖直最多可曾经进的距离,不可以拐弯。老鼠的出发点是(1,1)。

对于老鼠从当前点可以到达的点。筛选出从这些点到达当前点所能获得的cheese的最大值。

思路:记忆化搜索。

假设对于当前的点。没有被搜索过(dp[i][j]=0)。那么就对其进行搜索。搜索过程中记录下最优的解。

假设已经被搜索过了,就能够直接利用已经记录的值来进行推断 了,不须要再去搜索。

假设搜索完以后结果还是0。表明他不能再有新的路能够走了。结果就是他本身了。

#include<stdio.h>
#include<string.h>
#define LL __int64
#define max(a,b) a>b? a:b
int n,k;
LL a[105][105],dp[105][105];
int dir[][2]={0,1,0,-1,1,0,-1,0};
void dfs(int x,int y)
{ for(int i=0;i<4;i++)
{
for(int j=1;j<=k;j++)
{
int xx=x+dir[i][0]*j;
int yy=y+dir[i][1]*j;
if(xx<=0||yy<=0||xx>n||yy>n)continue;
if(a[xx][yy]>a[x][y]){
if(dp[xx][yy]==0){ //假设没有被搜索过
dfs(xx,yy);
dp[x][y]=max(dp[xx][yy]+a[x][y],dp[x][y]);
}
else dp[x][y]=max(dp[xx][yy]+a[x][y],dp[x][y]);
}
}
}
if(dp[x][y]==0)dp[x][y]=a[x][y]; //表明已经没有路能够走了。
return ;
}
int main()
{
int i,j;
while(scanf("%d%d",&n,&k)!=EOF)
{
if(n==-1&&k==-1)break;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%I64d",&a[i][j]);
memset(dp,0,sizeof(dp));
dfs(1,1);
printf("%I64d\n",dp[1][1]);
}
return 0;
}

hdu1078 FatMouse and Cheese(记忆化搜索)的更多相关文章

  1. hdu1078 FatMouse and Cheese(记忆化搜索)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:pid=1078" target="_blank">http://acm. ...

  2. hdu1078 FatMouse and Cheese —— 记忆化搜索

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 代码1: #include<stdio.h>//hdu 1078 记忆化搜索 #in ...

  3. HDU - 1078 FatMouse and Cheese (记忆化搜索)

    FatMouse has stored some cheese in a city. The city can be considered as a square grid of dimension ...

  4. P - FatMouse and Cheese 记忆化搜索

    FatMouse has stored some cheese in a city. The city can be considered as a square grid of dimension ...

  5. HDU 1078 FatMouse and Cheese 记忆化搜索DP

    直接爆搜肯定超时,除非你加了某种凡人不能想出来的剪枝...555 因为老鼠的路径上的点满足是递增的,所以满足一定的拓补关系,可以利用动态规划求解 但是复杂的拓补关系无法简单的用循环实现,所以直接采取记 ...

  6. [HDOJ1078]FatMouse and Cheese(记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意:给出n, k,然后给出n*n的地图,(下标0~n-1),有一只老鼠从(0,0)处出发,只能 ...

  7. HDU 1078 FatMouse and Cheese (记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 老鼠初始时在n*n的矩阵的(0 , 0)位置,每次可以向垂直或水平的一个方向移动1到k格,每次移 ...

  8. HDU 1078 FatMouse and Cheese (记忆化搜索+dp)

    详见代码 #include <iostream> #include <cstdio> #include <cstdlib> #include <memory. ...

  9. HDU ACM 1078 FatMouse and Cheese 记忆化+DFS

    题意:FatMouse在一个N*N方格上找吃的,每一个点(x,y)有一些吃的,FatMouse从(0,0)的出发去找吃的.每次最多走k步,他走过的位置能够吃掉吃的.保证吃的数量在0-100.规定他仅仅 ...

  10. !HDU 1078 FatMouse and Cheese-dp-(记忆化搜索)

    题意:有一个n*n的格子.每一个格子里有不同数量的食物,老鼠从(0,0)開始走.每次下一步仅仅能走到比当前格子食物多的格子.有水平和垂直四个方向,每一步最多走k格,求老鼠能吃到的最多的食物. 分析: ...

随机推荐

  1. Spring Cloud和Dubbo的对比

  2. Delphi最简化异步选择TCP服务器

    网上Delphi的Socket服务器优良代码,实在少见,索性写个简化的异步Socket服务器,虽然代码较少,但却该有的都有了,使用的是异步选择WSAAsyncSelect,减少了编写线程的繁琐.可能会 ...

  3. django 标签

    django标签 {% if/for/ifequal/ifnotequal condition %} ...{{ name|first|lower}}{# interpretation:lower t ...

  4. Linux从入门到适应(一):VSCode C++环境配置

    作为在Windows环境下习惯使用Visual Studio IDE的人,对于Linux环境下的Vim编辑使用十分难受,虽然网上很多人说vim非常牛逼和强大,但是我更加习惯于使用VS code的界面, ...

  5. EZOJ 宝石迷阵 建图+网络流匹配

    题面: 封印恶魔的地方可以看作是一个 n*m 的矩形,包含了 n*m 个祭坛,并且其 中有一些祭坛已经损坏了. 如果 i+j 为偶数,那么第 i 行第 j 列的祭坛只要没有损坏,就一定会封印有一个恶魔 ...

  6. CF1000G Two-Paths

    题目大意:给你一棵树,其中点上和边上都有值.定义2-Path为经过一条边最多两次的路径,价值为经过点的权值加和-经过边权值*该边经过次数.4e5组询问,每次询问树上连接x,y两点的2-Path的最大价 ...

  7. Java设计模式之策略模式(Strategy Pattern)

    简介 策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 组成 1.抽象策略角色(Strategy): 策略类,通常由一个接口或者抽象类实现. 2.具 ...

  8. IDE简介

    IDE(Integrated Development Environment) 集成开发环境 十种集成开发工具: 微软 Visual Studio (VS) NetNeans PyCharm Inte ...

  9. 第二十二节:scrapy爬虫识别验证码(一)类库安装

    一.安装tesserocr 1.首先下载tesseract:https://digi.bib.uni-mannheim.de/tesseract/ ,我下载的是tesseract-ocr-setup- ...

  10. 移动Web解决方案的链接收藏

    信息类 html5 浏览器兼容性查询 - 浏览器内建对象文档 es5规范浏览器兼容性表格 es6规范浏览器兼容性表格 stackoverflow 最靠谱的问题解决方案 github 开源代码网站 全球 ...