码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1078 FatMouse and Cheese【记忆化搜索】

时间:2015-03-08 15:41:56      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:

题意:给出n*n的二维矩阵,和k,老鼠每次最多走k步,问老鼠从起点(0,0)出发,能够得到的最大的数(即为将每走过一点的数都加起来的和最大)是多少

和上一题滑雪一样,搜索的方向再加一个循环

技术分享
 1 #include<iostream>  
 2 #include<cstdio>  
 3 #include<cstring> 
 4 #include <cmath>   
 5 #include<algorithm>  
 6 using namespace std;
 7 
 8 typedef long long LL;
 9 int a[1005][1005],d[1005][1005],n,k;
10 int dir[4][2]={1,0,-1,0,0,1,0,-1};
11 
12 int dfs(int x,int y){
13     if(d[x][y]) return d[x][y];//如果已经搜过这一点,则直接返回,不用再重复计算 
14     int ans=0;
15     for(int j=1;j<=k;j++){
16         for(int i=0;i<4;i++){ //四个 方向搜 
17         int nx=x+dir[i][0]*j;
18         int ny=y+dir[i][1]*j;
19         if(nx<0||nx>=n||ny<0||ny>=n) continue;//越界 
20         if(a[x][y]<a[nx][ny])
21         ans=max(ans,dfs(nx,ny));
22       }
23     }
24     
25     return d[x][y]=ans+a[x][y];    
26 }
27 
28 int main()
29 {
30     while(scanf("%d %d",&n,&k)!=EOF&&n!=-1&&k!=-1){
31         for(int i=0;i<n;i++)
32         for(int j=0;j<n;j++) cin>>a[i][j];
33         
34         memset(d,0,sizeof(d));
35         
36         printf("%d\n",dfs(0,0));
37     }
38     return 0;
39 }
View Code

 

HDU 1078 FatMouse and Cheese【记忆化搜索】

标签:

原文地址:http://www.cnblogs.com/wuyuewoniu/p/4321742.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!