hdu1078 FatMouse and Cheese(记忆化搜索)

题目链接:

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;
}
时间: 2024-10-22 00:17:00

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

hdu1078 FatMouse and Cheese(记忆化搜索)

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 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

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

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 题目大意:一个n*n的图,每个点都有奶酪,老鼠从(0,0)开始走,每次最多只能走k步就要停下来,停下的这个位置的奶酪数只能比上一个停留的位置大,并获取其奶酪,每次只能水平或垂直走,问最多能得到的奶酪. 解题思路:记忆化搜索,这方面还是写的太少,还要看别人才会,这个就当个例子参考吧. 1 #include<cstdio> 2 #include<cstring> 3 #include

FatMouse and Cheese(记忆化搜索)

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 a

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

题意:给定一个n*n的矩阵,问从(0,0)开始走,每次最多水平或者垂直走k个格子,且要保证每次到达的格子要大于前一个,问最大和是多少. 析:一个很简单的记忆搜索,dp[i][j],表示到达(i,j)的最大和是多少,我们可以反着推出答案. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cst

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

详见代码 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <memory.h> 5 using namespace std; 6 const int inf=0x3f3f3f3f; 7 int a[110][110]; 8 int dp[110][110];//表示到i,j的最大路径和 9 int dir[4][2]= {1,0,-1,0,0,1,0,-1};

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

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意:给出n, k,然后给出n*n的地图,(下标0~n-1),有一只老鼠从(0,0)处出发,只能走直线,并且目标点的数值比当前点要大.每次最长可以走k步,问最长的一条链的数值和. 用一个二维数组dp(i,j)表示某一格出发的时候最长链的数值和,然后dfs. 1 #include <algorithm> 2 #include <iostream> 3 #include <io

HDU1078:FatMouse and Cheese(记忆化)

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 a

HDU ACM 1078 FatMouse and Cheese 记忆化+DFS

题意:FatMouse在一个N*N方格上找吃的,每个点(x,y)有一些吃的,FatMouse从(0,0)的出发去找吃的,每次最多走k步,他走过的位置可以吃掉吃的,保证吃的数量在0-100,规定他只能水平或者垂直走,每走一步,下一步吃的数量需要大于此刻所在位置,问FatMouse最多可以吃多少东西. 需要对步数进行扩展. #include<iostream> using namespace std; #define N 101 #define max(a,b) ((a)>(b)?(a):(

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

题意:有一个n*n的格子.每一个格子里有不同数量的食物,老鼠从(0,0)開始走.每次下一步仅仅能走到比当前格子食物多的格子.有水平和垂直四个方向,每一步最多走k格,求老鼠能吃到的最多的食物. 分析: 矩阵上求最大子路线和,可是不像一维的最大子序列那么easy,由于二维的确定不了计算顺序. 既然不能确定计算顺序,那么就能够利用dp记忆化搜索,这个正好不用管计算顺序: dp记忆化搜索的思想:递归,然后通过记录状态dp[i][j]是否已经计算过来保证每一个状态仅仅计算一次避免反复计算.若计算过则返回d

HDU1078 FatMouse and Cheese 【内存搜索】

FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4966    Accepted Submission(s): 2035 Problem Description FatMouse has stored some cheese in a city. The city can be considere