hdu1078(记忆化搜索)
题意:给出n*n的格子,每个各自里面有些食物,问一只老鼠每次走最多k步所能吃到的最多的食物
这道题目,值得我记住它,re了n次,以前写搜索没有注意的一个小地方,导致re这么多次的
ac代码:
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int dp[110][110],s[110][110];
int n,k,t[4][2]={1,0,-1,0,0,1,0,-1};
int dfs(int x,int y)
{
int maxx=0,xx,yy,ans;
if(!dp[x][y])
{
for(int i=1;i<=k;i++)
{
for(int j=0;j<4;j++)
{
xx=x+t[j][0]*i;
yy=y+t[j][1]*i;
if(xx>=0&&xx<n&&yy>=0&&yy<n&&s[xx][yy]>s[x][y])
{
ans=dfs(xx,yy);
if(ans>maxx)
maxx=ans;
}
}
}
dp[x][y]=maxx+s[x][y];
}
return dp[x][y];
}
int main()
{
while(scanf("%d%d",&n,&k)>0)
{
if(n==-1&&k==-1)
break;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",&s[i][j]);
memset(dp,0,sizeof(dp));
int sum=dfs(0,0);
printf("%d\n",sum);
}
return 0;
}
re代码:
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int dp[110][110],s[110][110];
int n,k,t[4][2]={1,0,-1,0,0,1,0,-1};
int dfs(int x,int y)
{
int maxx=0,xx,yy,ans;
if(!dp[x][y])
{
for(int i=1;i<=k;i++)
{
for(int j=0;j<4;j++)
{
xx=x+t[j][0]*i;
yy=y+t[j][1]*i;
if(s[xx][yy]>s[x][y]&&xx>=0&&xx<n&&yy>=0&&yy<n) //这里错了,不能将s[xx][yy]先判断,否则出现re
{
ans=dfs(xx,yy);
if(ans>maxx)
maxx=ans;
}
}
}
dp[x][y]=maxx+s[x][y];
}
return dp[x][y];
}
int main()
{
while(scanf("%d%d",&n,&k)>0)
{
if(n==-1&&k==-1)
break;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",&s[i][j]);
memset(dp,0,sizeof(dp));
int sum=dfs(0,0);
printf("%d\n",sum);
}
return 0;
}
hdu1078(记忆化搜索)的更多相关文章
- hdu1078 记忆化搜索
/* hdu 1078 QAQ记忆化搜索 其实还是搜索..因为里面开了一个数组这样可以省时间 (dp[x][y]大于0就不用算了直接返回值) */ #include<stdio.h> #i ...
- HDU1078记忆化搜索
FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu1078 记忆化搜索(DP+DFS)
题意:一张n*n的格子表格,每个格子里有个数,每次能够水平或竖直走k个格子,允许上下左右走,每次走的格子上的数必须比上一个走的格子的数大,问最大的路径和. 我一开始的思路是,或许是普通的最大路径和,只 ...
- kuangbin专题十二 HDU1078 FatMouse and Cheese )(dp + dfs 记忆化搜索)
FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu1078 FatMouse and Cheese —— 记忆化搜索
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 代码1: #include<stdio.h>//hdu 1078 记忆化搜索 #in ...
- hdu1078 FatMouse and Cheese(记忆化搜索)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1078 题目大意: 题目中的k表示横向或者竖直最多可曾经进的距离,不可以拐弯.老鼠的出发点是(1,1) ...
- hdu1078 FatMouse and Cheese(记忆化搜索)
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:pid=1078" target="_blank">http://acm. ...
- 再谈记忆化搜索 HDU-1078
最近做DP题目,发现无论是LCS,还是有些题目涉及将动态规划的路径打印出来,而且有时候还要按格式输出,这个时候,记忆化搜索显得尤其重要,确实,记忆化搜索使用优化版本的动态规划,用起来思路清晰,非常方便 ...
- 专题1:记忆化搜索/DAG问题/基础动态规划
A OpenJ_Bailian 1088 滑雪 B OpenJ_Bailian 1579 Function Run Fun C HDU 1078 FatMouse and Chee ...
- [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索
1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...
随机推荐
- invalidate和requestLayout方法源码分析
invalidate方法源码分析 在之前分析View的绘制流程中,最后都有调用一个叫invalidate的方法,这个方法是啥玩意?我们来看一下View类中invalidate系列方法的源码(ViewG ...
- 百度、淘宝、腾讯三大巨头HTML页面有何高招?
众所周知用html5新增标签布局不光可以使页面更具有可读性,也能使代码更清晰规范,但是兼容性成为了首要的问题,如何解决也是问题的关键. [兼容HTML5方案] 百度贴吧,百度图片的实现: <!- ...
- sscanf %*s
一次在源码里看到 %*s 的格式,从未见过百思不得其解,今天用google的code搜索,搜到一些使用范例,猜测%*s 是说这里有一些字符,长度不一定,按正则表达式的习惯,*代办任意非负整数.例如: ...
- java 内存泄漏和内存溢出
参考:https://blog.csdn.net/eff666/article/details/52784724 1.内存溢出 内存溢出:OOM(OutOfMemoryError)异常,即程序需要内 ...
- 【云计算】Docker 多进程管理方案
docker容器内多进程的管理方案 时间 2015-05-08 00:00:00 涯余 ...
- 成都PHP开发project师薪资信息
这是成都的PHPproject开发师招聘.如图所见,最低的月薪是4K,最高的是35W,PHP开发工程师正处于炙手可热的发展趋势,还愁拿不到高薪,找不到工作的你,还犹豫什么,机会就在眼前,成都传智播客P ...
- MYSQL获取自增主键【4种方法】(转)
转自:http://blog.csdn.net/ultrani/article/details/9351573 作者已经写的非常好了,我不废话了,直接转载收藏: 通常我们在应用中对mysql执行了in ...
- iphone系统更新 3002错误
一:错误原因 与苹果服务器通信连接错误 二:解决 windows下:c:/windows/system32/drivers/etc 修改里面的hosts文件 去掉和apple.com相关的 三:ios ...
- (转)更新Java final常量后,请重新编译你的class
程序中使用的各种常量用一个类来统一管理,类似: public class AppConst { public static final String STR_1 = "String1&quo ...
- OpenJudge百炼习题解答(C++)--题4010:2011
题: 总时间限制: 1000ms 内存限制: 65536kB 描写叙述 已知长度最大为200位的正整数n.请求出2011^n的后四位. 输入 第一行为一个正整数k,代表有k组数据,k<=2 ...