HDOJ1078 记忆化搜索入门题 有详细的记忆化搜索模板程序

HDOJ1078 记忆化搜索入门题 有详细的记忆化搜索模板程序FatMouseandCheeseTimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):10863    AcceptedSubmission(s):4625ProblemDescriptionFatMo

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

FatMouse and Cheese

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




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
 


Source
 


Recommend
We have carefully selected several similar problems for you:  
1080 
1074 
1081 
1025 
1158 


从(0,0)这个点出发,每次最多走K步,要求走到的格子数大于原来的,求问总那么多步后总和最大是多少。
记忆化搜索,很多路径有重复的,跟DP有些相似。
写了个DFS的记忆化搜索模板,作为参考。

记忆化搜索是自顶向下的,用递归实现,返回的最优解应该在出发点上

#include <iostream>
#include <cstdio>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <cmath>
using namespace std;

const int  maxn =105;
int a[maxn][maxn],dp[maxn][maxn];
int n,k;
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};

int dfs(int x, int y){
    int tmp=0;
    for (int j=1;j<=k;j++){
      for (int i=0;i<4;i++){
        int xx=x+dx[i]*j; //k步是水平或竖直的
        int yy=y+dy[i]*j;
        if (xx<0 || yy<0 || xx>=n || yy>=n) continue;
        if (a[x][y]>=a[xx][yy]) continue;
        if (dp[xx][yy]) { //如果已经探索过了,就没必要继续深搜了
            tmp=max(tmp,dp[xx][yy]); //取最大值
            continue;
        }
        tmp=max(tmp,dfs(xx,yy)); //取所有方案中的最大值
      }
    }
    return dp[x][y]=a[x][y]+tmp;
}

int main(){
    std::ios::sync_with_stdio(false); //提高cin输入效率
    while (cin >> n >> k){
        if (n==-1 && k == -1) break;
        for (int i=0;i<n;i++){
            for (int j=0;j<n;j++) cin>>a[i][j];
        }
        memset(dp,0,sizeof(dp));
        cout<<dfs(0,0)<<endl; //最优解在出发点上
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164447.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sql语句 模糊查找like

    sql语句 模糊查找like模糊查找:like语法形式:字段like’要查找字符’说明:1、like模糊查找用于对字符类型的字段进行字符匹配查找。2、要查找的字符中,有两个特殊含义的字符:%,_:2.1:%含义是:代表0或多个的任意字符2.2:_含义是:代表1个任意字符2.3:这里的字符都是指现实中可见的一个“符号”,而不是字节。3、语法:like’%关键字%’SELECT*FROMstudentWHERENAMELIKE’张%’;–…

    2022年6月5日
    41
  • idea2021.11.1激活码_最新在线免费激活

    (idea2021.11.1激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月28日
    52
  • 被动信息收集

    被动信息收集被动信息收集概述和目的信息收集的方式分为两种:被动和主动。被动信息收集方式是指利用第三方的服务对目标进行了解,如:Google搜索。主动的信息收集方式:通过直接访问、扫描网站,这种将流量流经网站的行为。比如:nmap扫描端口。被动信息收集的目的:通过公开渠道,去获得目标主机的信息,从而不与目标系统直接交互,避免留下痕迹。信息收集内容1.IP地址段2.域名信息3.邮箱…

    2022年6月18日
    64
  • 在 Ubuntu 12.04 上通过安装源安装 Open vSwitch (OVS)

    在 Ubuntu 12.04 上通过安装源安装 Open vSwitch (OVS)

    2021年12月9日
    78
  • 静态方法中可以访问非静态成员变量_多线程局部变量会不会互相影响

    静态方法中可以访问非静态成员变量_多线程局部变量会不会互相影响静态内部类访问包含它的外部类的非静态成员变量时,可以通过new外部类().成员的方式访问,这是因为静态的只能访问静态的,因为他们在对象没创建前就存在了。如果想访问非静态的则必须初始化该对象,因为只有初始化后对象在内存才存在(静态的除外)…

    2022年8月31日
    9
  • db4o php,db4o官方停止支持及面向对象数据库的一些感想

    db4o php,db4o官方停止支持及面向对象数据库的一些感想前一段时间试用了db4o,真心觉得不错,但自己在国内搜索了一下,并没有找到任何一个专门的论坛和面向对象的数据库产品,深感这东西在国内并没有太普及。但自己试用觉得这个东东真心不错(当然也有自己的优势和劣势),所以自己建立了这个网站来推广(面向对前一段时间试用了db4o,真心觉得不错,但自己在国内搜索了一下,并没有找到任何一个专门的论坛和面向对象的数据库产品,深感这东西在国内并没有太普及。但自己试用觉…

    2022年7月21日
    13

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号