zoukankan      html  css  js  c++  java
  • 记忆化搜索——HDU

    题目含义

    给出n*n的地图和每次行走最长距离k,每次到达的数字必须大于原来的数字

    问走一遍得到的数字最大是多少

    题目分析

    一个dfs就可以了

    题目代码

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    typedef long long LL;
    const int maxn=1e5+7;
    int n,k;
    int mapp[107][107],dp[107][107];
    int dir[4][2]={-1,0,1,0,0,1,0,-1};
    int dfs(int x,int y){
        if(dp[x][y]!=-1)return dp[x][y];
        int maxx=0;
        for(int i=0;i<4;i++)
        for(int j=1;j<=k;j++){
            int sx=x+dir[i][0]*j,sy=y+dir[i][1]*j;
            if(sx<0||sy<0||sx>=n||sy>=n||mapp[sx][sy]<=mapp[x][y])continue;
            int temp=dfs(sx,sy);
            maxx=max(maxx,temp);
        }
        return dp[x][y]=maxx+mapp[x][y];
    }
    int main(){
        while(scanf("%d%d",&n,&k)){
            memset(dp,-1,sizeof(dp));
            if(n==-1&&k==-1)return 0;
            for(int i=0;i<n;i++)
            for(int j=0;j<n;j++){
                scanf("%d",&mapp[i][j]);
            }
            memset(dp,-1,sizeof(dp));
            printf("%d
    ",dfs(0,0));
        }
    }
  • 相关阅读:
    多态性与转型
    安装tensorflow
    MySQL基础补缺
    各种排序算法理解
    Ubuntu命令行变成白色
    开机显示grub命令
    E: 无法获得锁 /var/lib/dpkg/lock-frontend
    类与方法
    Java语言浅谈
    二进制数的有效讨论
  • 原文地址:https://www.cnblogs.com/helman/p/11252383.html
Copyright © 2011-2022 走看看