HDU 1078 FatMouse and Cheese

题目链接~~>

做题感悟:这题开始写的代码很挫,看别人的代码后才恍然大悟。

解题思路:记忆化搜索。

代码:

#include<stdio.h>
#include<iostream>
#include<map>
#include<string>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std ;
const int INF = -99999999 ;
const int MX= 1005 ;
int n,k ;
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1} ;
int dp[MX][MX],g[MX][MX] ;
bool search(int x,int y)
{
    if(x<0||y<0||x>=n||y>=n) // 大于等于 n!!!
       return false ;
       return true ;
}
int dfs(int x,int y)
{
    if(dp[x][y])
          return dp[x][y] ;
    int ans=0 ;
    for(int i=0 ;i<4 ;i++)
      for(int j=1 ;j<=k ;j++)
      {
          int sx=x+dx[i]*j ;
          int sy=y+dy[i]*j ;
          if(search(sx,sy)&&g[x][y]<g[sx][sy])
          {
              int mx=dfs(sx,sy) ;
              ans= ans > mx ? ans : mx ;
          }
      }
    dp[x][y]=g[x][y]+ans ;
    return dp[x][y] ;
}
int main()
{
    while(~scanf("%d%d",&n,&k))
    {
        if(n==-1&&k==-1)  break ;
        memset(dp,0,sizeof(dp)) ;
        for(int i=0 ;i<n ;i++)
          for(int j=0 ;j<n ;j++)
              scanf("%d",&g[i][j]) ;
        printf("%d\n",dfs(0,0)) ;
    }
    return 0 ;
}

原先代码~>

你可能感兴趣的:(HDU 1078 FatMouse and Cheese)