hdu 1078 fatmouse and cheese 记忆化搜索

原创 2012年03月26日 06:33:17

FatMouse and Cheese

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2394 Accepted Submission(s): 913


Problem Description
FatMouse has stored some cheese in a city. The city can be considered as a square grid of dimension n: each grid location is labelled (p,q) where 0 <= p < n and 0 <= q < n. At each grid location Fatmouse has hid between 0 and 100 blocks of cheese in a hole. Now he's going to enjoy his favorite food.

FatMouse begins by standing at location (0,0). He eats up the cheese where he stands and then runs either horizontally or vertically to another location. The problem is that there is a super Cat named Top Killer sitting near his hole, so each time he can run at most k locations to get into the hole before being caught by Top Killer. What is worse -- after eating up the cheese at one location, FatMouse gets fatter. So in order to gain enough energy for his next run, he has to run to a location which have more blocks of cheese than those that were at the current hole.

Given n, k, and the number of blocks of cheese at each grid location, compute the maximum amount of cheese FatMouse can eat before being unable to move.

Input
There are several test cases. Each test case consists of

a line containing two integers between 1 and 100: n and k
n lines, each with n numbers: the first line contains the number of blocks of cheese at locations (0,0) (0,1) ... (0,n-1); the next line contains the number of blocks of cheese at locations (1,0), (1,1), ... (1,n-1), and so on.
The input ends with a pair of -1's.

Output
For each test case output in a line the single integer giving the number of blocks of cheese collected.

Sample Input
3 1 1 2 5 10 11 6 12 12 7 -1 -1

Sample Output
37


/*
记忆化搜索,实质是滑雪问题的加强版,因为这里可以走多步
想了好久是因为没有读出即使走K步也必须走直线,即
“He eats up the cheese where he stands and then
runs either horizontally or vertically to another location. ”
不过是多加个循环罢了
*/
#include<stdio.h>
#include<string.h>
#define N 101
#define max(a,b) (a)>(b)?(a):(b)
int n,k,maze[N][N],ch[N][N];
int move[][2]={0,1,1,0,0,-1,-1,0};
bool ok(int x,int y)
{
    return (x>=0&&x<n&&y>=0&&y<n);
}
int dfs(int x,int y)
{
    if(ch[x][y])
        return ch[x][y];
    int i,j,a,b;
    int num=0;
    for(i=1;i<=k;++i)
    {
        for(j=0;j<4;++j)
        {
            a=x+move[j][0]*i;
            b=y+move[j][1]*i;
            if(ok(a,b)&&maze[a][b]>maze[x][y])
                num=max(num,dfs(a,b));
        }
    }
    return ch[x][y]=num+maze[x][y];
}
int main()
{
    while(scanf("%d%d",&n,&k)==2&&(n!=-1))
    {
        int i,j;
        for(i=0;i<n;++i)
            for(j=0;j<n;++j)
                scanf("%d",&maze[i][j]);
        memset(ch,0,sizeof(ch));
        dfs(0,0);
        int sum=0;
        for(i=0;i<n;++i)
            for(j=0;j<n;++j)
                sum=max(sum,ch[i][j]);
        printf("%d\n",sum);
    }
    return 0;
}


hdu——1078——FatMouse and Cheese:记忆化搜索

Problem Description FatMouse has stored some cheese in a city. The city can be considered as a squar...
  • u011470356
  • u011470356
  • 2013年08月17日 20:04
  • 570

HDU 1078 FatMouse and Cheese【第一道记忆化搜索题】

第一次做记忆化搜索的问题 查找了网上的资料 参考了网上对记忆化搜索的解释  1.记忆化搜索的思想     记忆化搜索的思想是,在搜索过程中,会有很多重复计算,如果我们能记录一些状态的答案,就可以...
  • qq_24653023
  • qq_24653023
  • 2016年07月12日 22:23
  • 1247

杭电oj 1078 FatMouse and Cheese(记忆化搜索)

1078 FatMouse and CheeseTime
  • yqdjl6
  • yqdjl6
  • 2017年06月03日 00:17
  • 103

hdu 1078 记忆化搜索

FatMouse has stored some cheese in a city. The city can be considered as a square grid of dimension ...
  • Littlewhite520
  • Littlewhite520
  • 2017年02月06日 17:01
  • 305

HDU 1078 记忆化搜索

FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth...
  • qq_22902423
  • qq_22902423
  • 2015年08月12日 00:05
  • 168

hdu 1078(记忆化搜索)

题意:老鼠每次最多走k步停下来,停下的这个位置只能比上一个停留的位置大,并获取其价值,每次只能水平或垂直走,问最大能得到的价值 解题思路:这道题可以用记忆化搜索解决,dp[i][j]表示老鼠在位置(...
  • hexianhao
  • hexianhao
  • 2016年04月06日 09:29
  • 109

hdu 1078 记忆化搜索

点击打开链接 #include #include #include using namespace std; const int M = 110; typedef struct{ int x...
  • Jeremy1149
  • Jeremy1149
  • 2016年06月07日 14:24
  • 181

HDU FatMouse and Cheese (记忆化搜索+dp思想)

思路:最朴素的思想就是,枚举从(0,0)出发所有可能路径,求出每一条路径的ans,打擂台比较,最大的即为答案; 问题是,对于一个100*100的图每次重复枚举所有可能是很夸张的;所以可以用到一个其实...
  • AngOn823
  • AngOn823
  • 2016年04月08日 00:49
  • 230

hdu 1078 记忆化搜索

hdu 1078 http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意:每次可以朝一个方向走k格,必须走到一个数值比当前值大的点,问最多数值加起来能有多...
  • liujc_
  • liujc_
  • 2015年10月24日 23:14
  • 229

HDU 1428 漫步校园(最短路+记忆化搜索)

漫步校园 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub...
  • hurmishine
  • hurmishine
  • 2016年07月14日 22:42
  • 1666
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdu 1078 fatmouse and cheese 记忆化搜索
举报原因:
原因补充:

(最多只允许输入30个字)