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


    题意:给出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
    ",dfs(0,0));
    37     }
    38     return 0;
    39 }
    View Code
  • 相关阅读:
    js原型链原理看图说话
    this关键字
    ECMAScript 继承机制实现
    Javascript闭包模拟私有成员
    关于javascript中apply()和call()方法的区别
    arguments.callee
    有用的工具函数
    ECMAScript的世界
    JavaScript 技巧与高级特性
    自定义控件不让在界面拖放。
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4321742.html
Copyright © 2020-2023  润新知